XGRIDSДокументация
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • Polski
  • Nederlands
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • Polski
  • Nederlands
  • Lixel CyberColor

    • Руководство пользователя LCC Studio

      • Начало работы
      • Версия и обновления
      • Загрузка и установка
      • Обзор интерфейса и навигация
      • Перед реконструкцией
      • Реконструкция модели
      • Реконструкция одиночной модели
      • Объединение карт
      • Воздушно-наземное объединение
      • Воздушная реконструкция
      • Мои модели
      • Другие функции
      • Настройки и учётная запись
      • Конвертер
      • Реконструкция по видео
      • Часто задаваемые вопросы
    • LCC Scene Editor

      • Версия и обновления
      • Учётная запись и вход
      • Обзор продукта и главная страница
      • Интерфейс редактора
      • Режимы навигации по сцене
      • Файл
      • Настройки
      • Операции редактирования
      • Окно
      • Глобальная панель инструментов
      • Ресурсы и свойства
      • Левая панель инструментов
      • Точки обзора
      • Портал
      • Skybox
      • Аннотации
      • Измерение
      • Flythrough
      • Отчёт по сцене
      • 3D Layout
      • Мини-карта
      • Preview Mode (Viewer)
      • Справка
      • Часто задаваемые вопросы
      • Точка появления
    • LCC Model Editor

      • Версия и обновления
      • Руководство пользователя
      • Обзор и интерфейс
      • Операции с файлами
      • Инструменты выбора
      • Редактирование моделей
      • Измерение
      • Цветокоррекция
      • Управление ресурсами
      • Настройки и справка
      • Часто задаваемые вопросы
    • Рекомендации по применению

      • Объединение нескольких крупных моделей 3DGS
  • Plugin & SDK

    • Unreal

      • Введение
      • Быстрый старт — Windows
      • Быстрый старт — Linux
      • Быстрый старт — Quest3
      • Редакции и лицензирование
      • Рендеринг
      • Растеризация Tiled (экспериментально)
      • Визуальные настройки
      • Нормали и освещение
      • Редактирование сцены
      • Параметры производительности
      • Руководство по оптимизации производительности
      • Интеграция со сторонними и движковыми плагинами
      • Прокси-меш
      • Анимация загрузки
      • Коллизии
      • Поддержка системы навигации
      • Поддержка однослойной воды
      • Локализация
      • Частые вопросы
      • Устранение неполадок
      • Журналы и диагностика
      • Свяжитесь с нами
      • Рекомендуемые практики

        • Переосвещение 3DGS с помощью меша LixelStudio
      • Справочник API

        • ALCCActorBase
        • ULCCComponentBase
        • ULCCComponent
        • ULCC2Component
        • Actor SOG / SPZ / PLY
        • ALCC2ProxyMesh
        • ALCCClippingVolume
        • ALCCSectionPlane
        • ALCCLoadVolume
        • ULCCUtilLibrary
        • Enums
        • Structs
      • Журнал изменений

        • v3.4.0
        • v3.3.1
        • v3.0.0
        • v2.2.1
        • v1.0.0
        • v0.9.0
        • v0.8.0
        • v0.7.1
        • v0.6.1
        • v0.5.2
        • v0.4.1
        • v0.4.0
        • v0.3.0
        • v0.0.5
        • v0.0.4
        • v0.0.3
        • v0.0.2
        • v0.0.1
    • Unity

      • Введение в Unity SDK
      • Технические возможности
      • Требования к среде разработки
      • Руководство по быстрому старту для PC
      • Руководство по оптимизации настроек проекта
      • Руководство по разработке для Pico 4 Ultra
      • Руководство по стримингу Pico 4 Ultra с PC
      • Руководство по разработке для Quest 3
      • Руководство по стримингу Quest 3 с PC
      • Руководство по разработке OpenXR
      • Руководство по бизнес-стримингу Pico 4 Ultra
      • Глоссарий
      • FAQ
      • Свяжитесь с нами
      • Руководство по разработке функций

        • Руководство по разработке смешанного рендеринга нескольких сцен
        • Руководство по разработке приёма теней
        • Руководство по разработке освещения в реальном времени
        • Руководство по разработке многокамерного рендеринга
        • Руководство по разработке рендеринга изображений высокого разрешения
        • Руководство по разработке совместимости форматов данных LCC и LCC2
        • Руководство по разработке эффекта загрузки
        • Руководство по разработке переключения режима рендеринга Mip
        • Руководство по разработке привязки к рёбрам и углам
        • Руководство по разработке проецируемых декалей
        • Руководство по разработке видеопроецируемой декали
        • Руководство по разработке подсветки
        • Руководство по разработке обрезки в реальном времени
        • Руководство по разработке коррекции цвета
        • Руководство по разработке получения данных Mesh сцены
        • Руководство по разработке в режиме редактора
        • Руководство по настройке параметров производительности рендеринга
        • Руководство по разработке совместной упаковки приложения и данных
        • Руководство по разработке системы коллизий
        • Руководство по проблемам с разрешениями при разработке на macOS
        • Руководство по разработке компиляции и упаковки для устройств iOS
      • Справочник по API

        • LCCManager
        • Renderer
        • Типы данных
      • Журнал изменений

        • v2.3.0
        • v2.2.10
        • v2.2.0
        • v2.1.19
        • v2.0.14

Руководство по разработке рендеринга изображений высокого разрешения

LCC Unity SDK поддерживает рендеринг изображений высокого разрешения, то есть рендеринг изображений сцены, превышающих разрешение дисплея. Например, когда разрешение дисплея составляет 1920×1080, LCC Unity SDK всё равно может рендерить и создавать изображения с разрешением 3840×2160 (4K), 2560×1440 (2K), 1920×1080 (1080p), 1280×720 (720P) и другими. После рендеринга изображений различных разрешений их можно использовать для создания изображений высокой чёткости и видео высокой чёткости. Ниже на примере рендеринга изображения 4K и сохранения его в JPG описаны полные шаги по реализации рендеринга изображений высокого разрешения.

Шаг 1: Создайте сцену и GameObject

Создайте совершенно новую сцену в Unity. Unity по умолчанию создаёт Main Camera и Directional Light.

Настройте Main Camera

Выберите Main Camera в окне Hierarchy и задайте его свойства в окне Inspector, как показано ниже.

Настройка свойств Main Camera

Настройка свойств Main Camera

Создайте LCCManager

Щёлкните правой кнопкой мыши в пустой области окна Hierarchy, выберите Create Empty во всплывающем меню, чтобы создать пустой GameObject, назовите его LCCManager, нормализуйте его Transform и добавьте к нему скрипт LCCManager через Add Component.

Создание GameObject LCCManager и добавление скрипта LCCManager

Создание GameObject LCCManager и добавление скрипта LCCManager

Создайте LCCRenderer

Щёлкните правой кнопкой мыши в пустой области окна Hierarchy, выберите Create Empty, чтобы создать пустой GameObject, назовите его LCCRenderer и задайте его Transform значения Rotation.x = -90 и Scale.x = -1.

Создание LCCRenderer и настройка его Transform

Создание LCCRenderer и настройка его Transform (Rotation.x = -90, Scale.x = -1)

Примечание:

Настройки Transform GameObject LCCRenderer (Rotation.x = -90, Scale.x = -1) выравнивают его с системой координат данных LCC. Подробнее о выравнивании системы координат см. в разделе «Система координат данных LCC» документа Введение в Unity SDK.

Шаг 2: Напишите скрипт рендеринга высокого разрешения

Создайте новый скрипт C# с именем HDRecord.cs со следующим кодом:

using System.IO;
using System.Collections;
using LCCCore;
using UnityEngine;

public class HDRecord : MonoBehaviour
{
    public LCCManager m_manager;
    public string m_FilePath;
    public Camera m_camera;

    private LCCCore.Renderer m_renderer;

    private const int HD_WIDTH = 3840;
    private const int HD_HEIGHT = 2160;
    private const string OUTPUT_DIR = @"G:\output";

    void Start()
    {
        m_manager.SetPlatformType(PlatformType.PC);
        m_manager.SwitchRenderPass(ActiveRenderMode.SingleRender);

        if (m_camera == null)
            m_camera = Camera.main;

        m_manager.SetMainCamera(m_camera);

        Debug.Log("[HDRecord] Запущено, загрузка данных...");
        m_renderer = m_manager.GetRender(this.transform);
        m_renderer.Load(m_FilePath, onProgress, onComplete);
    }

    private void onProgress(float _progress)
    {
        Debug.Log($"[HDRecord] Прогресс загрузки: {_progress:P1}");
    }

    private void onComplete()
    {
        Debug.Log("[HDRecord] Загрузка завершена, включение режима записи 4K...");

        float verticalFov = m_camera.fieldOfView;
        m_manager.SetRecordMode(true, new Vector2(HD_WIDTH, HD_HEIGHT), verticalFov);
        StartCoroutine(CaptureFrame());
    }

    private IEnumerator CaptureFrame()
    {
        // Ждём некоторое время, чтобы убедиться, что камера завершила рендеринг сцены в разрешении 4K
        yield return new WaitForSeconds(10);

        RenderTexture tempRT = RenderTexture.GetTemporary(HD_WIDTH, HD_HEIGHT, 24);
        RenderTexture preTarget = m_camera.targetTexture;
        Rect preRect = m_camera.rect;

        m_camera.targetTexture = tempRT;
        m_camera.rect = new Rect(0, 0, 1, 1);

        yield return new WaitForEndOfFrame();
        yield return new WaitForEndOfFrame();
        yield return new WaitForEndOfFrame();

        RenderTexture.active = tempRT;
        Texture2D tex = new Texture2D(HD_WIDTH, HD_HEIGHT, TextureFormat.RGB24, false);
        tex.ReadPixels(new Rect(0, 0, HD_WIDTH, HD_HEIGHT), 0, 0);
        tex.Apply();
        RenderTexture.active = null;

        m_camera.rect = preRect;
        m_camera.targetTexture = preTarget;
        RenderTexture.ReleaseTemporary(tempRT);

        byte[] jpgData = tex.EncodeToJPG(95);
        Destroy(tex);

        if (!Directory.Exists(OUTPUT_DIR))
            Directory.CreateDirectory(OUTPUT_DIR);

        string timestamp = System.DateTime.Now.ToString("yyyyMMdd_HHmmss");
        string filePath = Path.Combine(OUTPUT_DIR, $"HD4K_{timestamp}.jpg");
        File.WriteAllBytes(filePath, jpgData);

        Debug.Log($"[HDRecord] Изображение 4K сохранено: {filePath} ({jpgData.Length / 1024}КБ)");

        m_manager.SetRecordMode(false, new Vector2(Screen.width, Screen.height), m_camera.fieldOfView);
        Debug.Log("[HDRecord] Режим записи отключён, восстановлен обычный рендеринг.");
    }
}

Примечание:

  • Режим записи должен включаться после завершения загрузки LCC-сцены, поэтому SetRecordMode(true, ...) вызывается в обратном вызове onComplete.
  • После входа в режим записи SDK рендерит с фиксированным разрешением и вертикальным FOV. Рекомендуется подождать несколько кадров/секунд перед захватом кадра, чтобы убедиться, что сцена завершила рендеринг в целевом разрешении.
  • После захвата вызовите SetRecordMode(false, ...), чтобы восстановить обычный рендеринг.
  • Имя файла скрипта должно совпадать с именем класса (HDRecord.cs соответствует class HDRecord), иначе его нельзя прикрепить к GameObject.
  • HD_WIDTH и HD_HEIGHT в примере определяют выходное разрешение и могут быть изменены на 2K (2560×1440), 1080p (1920×1080), 720P (1280×720) и так далее по мере необходимости; OUTPUT_DIR — это выходной каталог — измените его на путь, куда у вас есть права на запись.

Шаг 3: Прикрепите скрипт и настройте свойства

  1. Прикрепите скрипт HDRecord.cs к GameObject LCCManager в окне Hierarchy.
  2. В окне Inspector перетащите GameObject LCCManager на свойство Manager скрипта.
  3. Заполните путь к файлу LCC в свойстве File Path скрипта.
  4. Остальные свойства (например, Camera) можно настроить свободно; если оставить пустым, скрипт автоматически использует Camera.main.
Прикрепление скрипта HDRecord и настройка его свойств

Прикрепление скрипта HDRecord и настройка его свойств в Inspector

Шаг 4: Запустите

Нажмите кнопку Play в окне Game. После завершения загрузки данных скрипт входит в режим записи 4K, захватывает один кадр и сохраняет его в виде изображения JPG в выходной каталог.

В этом примере изображение рендерится в 4K и затем сохраняется непосредственно как изображение JPG. Если вы хотите сохранить его как видео высокой чёткости, можно закодировать непрерывно захватываемые изображения высокого разрешения в видео высокой чёткости с помощью кодирования видео.

Ключевые шаги

Ключевые шаги для реализации рендеринга изображений высокого разрешения:

  1. Задайте основную камеру рендеринга через SetMainCamera и загрузите данные LCC с помощью Renderer.Load().
  2. После завершения загрузки сцены (в обратном вызове onComplete) войдите в режим записи через SetRecordMode(true, renderSize, verticalFov) и укажите целевое разрешение и вертикальный FOV.
  3. Отрендерьте камеру в целевом разрешении через RenderTexture, считайте пиксели обратно с помощью Texture2D.ReadPixels и закодируйте их в изображение для сохранения.
  4. После захвата восстановите обычный рендеринг через SetRecordMode(false, ...).

Примечания о рендеринге изображений высокого разрешения

  • Поддерживается только на PC/Mac. SetRecordMode действует только на платформах PC/Mac.
  • Фокусное расстояние камеры фиксировано в режиме записи. После входа в режим записи SDK рендерит с переданным фиксированным разрешением и вертикальным FOV и больше не меняется вместе с компонентом Camera.
  • Своевременно восстанавливайте обычный рендеринг. После завершения захвата или записи вызовите SetRecordMode(false, ...), чтобы восстановить обычное разрешение; иначе последующий рендеринг будет продолжать использовать разрешение записи.
  • Следите за накладными расходами на видеопамять и память. Чем выше разрешение, тем больше видеопамяти/памяти занимают RenderTexture и Texture2D. Рендеринг высокого разрешения рекомендуется на высокопроизводительных компьютерных устройствах.

API, связанный с записью

LCC Unity SDK предоставляет API режима записи через LCCManager. Он должен вызываться после завершения загрузки LCC-сцены (то есть в обратном вызове onComplete).

SetRecordMode

// Возвращаемое значение: void
public void SetRecordMode(bool isRecord, Vector2 renderSize, float verticalFov)

Задаёт режим записи. В режиме записи рендеринг использует фиксированное разрешение и FOV, что подходит для записи изображений и видео высокой чёткости.

ПараметрТипОписание
isRecordboolВходить ли в режим записи
renderSizeVector2Разрешение записи (ширина × высота), например (3840, 2160)
verticalFovfloatВертикальный FOV (поле зрения)

Пример использования:

// Вход в режим записи 4K
m_manager.SetRecordMode(true, new Vector2(3840, 2160), 60f);

// Завершение записи и восстановление обычного рендеринга
m_manager.SetRecordMode(false, new Vector2(Screen.width, Screen.height), m_camera.fieldOfView);

Примечания:

  • Поддерживается только на PC/Mac.
  • В режиме записи фокусное расстояние камеры фиксировано и не меняется вместе с компонентом Camera.
  • После завершения записи вызовите SetRecordMode(false, ...), чтобы восстановить обычный рендеринг.
  • Должен вызываться после завершения загрузки LCC-сцены.