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 поддерживает рендеринг несколькими камерами одновременно в режиме полного рендеринга одной сцены. Ниже на примере одной основной камеры и двух вторичных камер описаны полные шаги по реализации многокамерного рендеринга.

Шаг 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.

Создайте вторичные камеры рендеринга

Щёлкните правой кнопкой мыши в пустой области окна Hierarchy, чтобы создать две дополнительные камеры рендеринга, назовите их Camera01 и Camera02 соответственно и задайте свойства этих двух камер, как показано ниже.

Настройка свойств Camera01

Настройка свойств Camera01

Настройка свойств Camera02

Настройка свойств Camera02

В этом примере Viewport Rect двух камер настроен так, чтобы разместить их в нижнем левом углу и нижнем правом углу основного окна рендеринга соответственно.

Шаг 2: Напишите скрипт многокамерного рендеринга

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

using LCCCore;
using UnityEngine;

public class MultiCamera : MonoBehaviour
{
    public LCCManager m_manager;
    public string m_FilePath01;
    public Camera m_camera01;
    public Camera m_camera02;

    public Transform m_transform01;
    private LCCCore.Renderer m_renderer01;

    private int m_currentFileIndex = 0;

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

        Debug.Log("Запущено ");
        m_renderer01 = m_manager.GetRender(m_transform01);

        m_currentFileIndex = 0;
        m_renderer01.Load(m_FilePath01, onProgress, onComplete);
    }

    private void onProgress(float _progress)
    {
        Debug.Log($"[LCCRenderer] файл {m_currentFileIndex}, прогресс загрузки: {_progress:P1}");
    }

    private void onComplete()
    {
        Debug.Log($"[LCCRenderer] файл {m_currentFileIndex} загружен");

        m_manager.AddCamera(m_camera01);
        m_manager.AddCamera(m_camera02);
    }

    private void OnDestroy()
    {
        m_manager.RemoveCamera(m_camera01);
        m_manager.RemoveCamera(m_camera02);
    }
}

Примечание:

  • Вторичные камеры должны регистрироваться после завершения загрузки LCC-сцены, поэтому AddCamera вызывается в обратном вызове onComplete.
  • Имя файла скрипта должно совпадать с именем класса (MultiCamera.cs соответствует class MultiCamera), иначе его нельзя прикрепить к GameObject.
  • Основная камера задаётся через SetMainCamera, а вторичные камеры добавляются через AddCamera; нельзя добавить основную камеру в качестве вторичной.

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

  1. Прикрепите скрипт MultiCamera.cs к GameObject LCCRenderer в окне Hierarchy.
  2. В окне Inspector перетащите GameObject LCCManager на свойство Manager скрипта.
  3. Перетащите GameObject Camera01 и Camera02 на свойства Camera01 и Camera02 скрипта соответственно.
  4. Заполните путь к файлу LCC в свойстве File Path01 скрипта.
Прикрепление скрипта MultiCamera и настройка его свойств

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

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

Нажмите кнопку Play в окне Game, чтобы увидеть эффект рендеринга в реальном времени несколькими камерами в сцене.

Несколько камер рендерят одновременно после запуска

Несколько камер рендеринга рендерят одновременно после запуска

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

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

  1. Убедитесь, что сцена находится в режиме полного рендеринга одной сцены (SwitchRenderPass(ActiveRenderMode.SingleRender) и данные идут по пути Full Load).
  2. Основная камера задаётся через SetMainCamera; вторичные камеры регистрируются через AddCamera после завершения загрузки сцены (в обратном вызове onComplete).
  3. Управляйте областью рендеринга каждой камеры на экране через её Viewport Rect.
  4. При уничтожении объекта (OnDestroy) удалите вторичные камеры через RemoveCamera, чтобы избежать висячих ссылок.

Примечания о многокамерном рендеринге

  • Поддерживается только режим полного рендеринга. LCC SDK в настоящее время поддерживает многокамерный рендеринг только в режиме полного рендеринга одной сцены. Для оптимизации производительности в режиме чанкового рендеринга SDK загружает и рендерит только видимые данные внутри фрустума камеры; а для достижения высокой производительности фильтрация данных узлов сцены на стороне CPU, сборка данных и загрузка данных с CPU на GPU выполняются асинхронно, поэтому он не может обрабатывать и рендерить данные для нескольких камер отдельно в одном кадре.

  • Убедитесь, что сцена находится в состоянии полного рендеринга. Чтобы использовать полную функцию многокамерного рендеринга, настройте сцену на режим полного рендеринга (Full Load): используйте ActiveRenderMode.SingleRender и включите полный рендеринг на Renderer (Renderer.SetRenderAll(true), который вступает в силу при следующем Load()). Подробнее о режимах рендеринга и параметрах производительности см. в Руководство по быстрому старту для PC.

  • Чем больше камер, тем выше затраты на производительность. Каждая дополнительная камера рендеринга добавляет один полный проход рендеринга, поэтому производительность соответственно снижается. Многокамерный рендеринг рекомендуется на высокопроизводительных компьютерных устройствах.

  • Поддерживается только на PC/Mac. AddCamera / RemoveCamera действуют только на платформах PC/Mac.

API многокамерного рендеринга

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

SetMainCamera

// Возвращаемое значение: void
public void SetMainCamera(Camera _cam)

Задаёт основную камеру рендеринга. LCC использует эту камеру для отсечения по фрустуму, выбора LOD, сортировки и других операций.

ПараметрТипОписание
_camCameraОсновная камера рендеринга; передайте null, чтобы очистить её

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

m_manager.SetMainCamera(Camera.main);

Примечания:

  • Должна задаваться перед Renderer.Load().
  • Вызывайте её снова при переключении камер.
  • Поддерживается только на PC/Mac.
  • Передайте null, чтобы очистить основную камеру.

AddCamera

// Возвращаемое значение: void
public void AddCamera(Camera _cam)

Добавляет вторичную камеру. Вторичные камеры участвуют в рендеринге, но не влияют на выбор LOD.

ПараметрТипОписание
_camCameraВторичная камера

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

m_manager.AddCamera(m_camera01);

Примечания:

  • Поддерживается только на PC/Mac.
  • Нельзя добавить основную камеру в качестве вторичной.
  • Выбор LOD определяется только основной камерой; вторичные камеры повторно используют данные, отфильтрованные основной камерой, для рендеринга.

RemoveCamera

// Возвращаемое значение: void
public void RemoveCamera(Camera _cam)

Удаляет ранее добавленную вторичную камеру.

ПараметрТипОписание
_camCameraВторичная камера для удаления

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

m_manager.RemoveCamera(m_camera01);

Примечания:

  • Поддерживается только на PC/Mac.
  • Рекомендуется вызывать её при уничтожении объекта (OnDestroy), чтобы очистить ссылку на вторичную камеру.