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.5.0
        • 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
  • API

    • Структурированное пространственное моделирование

      • Руководство по подключению
      • Процесс моделирования
      • Справочник по API
      • Временные учётные данные для загрузки
      • Коды ошибок

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

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-сцены.