Руководство по разработке многокамерного рендеринга
LCC Unity SDK поддерживает рендеринг несколькими камерами одновременно в режиме полного рендеринга одной сцены. Ниже на примере одной основной камеры и двух вторичных камер описаны полные шаги по реализации многокамерного рендеринга.
Шаг 1: Создайте сцену и GameObject
Создайте совершенно новую сцену в Unity. Unity по умолчанию создаёт Main Camera и Directional Light.
Настройте Main Camera
Выберите Main Camera в окне Hierarchy и задайте его свойства в окне Inspector, как показано ниже.

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

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

Создание 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

Настройка свойств 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: Прикрепите скрипт и настройте свойства
- Прикрепите скрипт
MultiCamera.csк GameObject LCCRenderer в окне Hierarchy. - В окне Inspector перетащите GameObject LCCManager на свойство Manager скрипта.
- Перетащите GameObject Camera01 и Camera02 на свойства Camera01 и Camera02 скрипта соответственно.
- Заполните путь к файлу LCC в свойстве File Path01 скрипта.

Прикрепление скрипта MultiCamera и настройка его свойств в Inspector
Шаг 4: Запустите
Нажмите кнопку Play в окне Game, чтобы увидеть эффект рендеринга в реальном времени несколькими камерами в сцене.

Несколько камер рендеринга рендерят одновременно после запуска
Ключевые шаги
Ключевые шаги для реализации многокамерного рендеринга:
- Убедитесь, что сцена находится в режиме полного рендеринга одной сцены (
SwitchRenderPass(ActiveRenderMode.SingleRender)и данные идут по пути Full Load). - Основная камера задаётся через
SetMainCamera; вторичные камеры регистрируются черезAddCameraпосле завершения загрузки сцены (в обратном вызовеonComplete). - Управляйте областью рендеринга каждой камеры на экране через её Viewport Rect.
- При уничтожении объекта (
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, сортировки и других операций.
| Параметр | Тип | Описание |
|---|---|---|
_cam | Camera | Основная камера рендеринга; передайте null, чтобы очистить её |
Пример использования:
m_manager.SetMainCamera(Camera.main);
Примечания:
- Должна задаваться перед
Renderer.Load(). - Вызывайте её снова при переключении камер.
- Поддерживается только на PC/Mac.
- Передайте
null, чтобы очистить основную камеру.
AddCamera
// Возвращаемое значение: void
public void AddCamera(Camera _cam)
Добавляет вторичную камеру. Вторичные камеры участвуют в рендеринге, но не влияют на выбор LOD.
| Параметр | Тип | Описание |
|---|---|---|
_cam | Camera | Вторичная камера |
Пример использования:
m_manager.AddCamera(m_camera01);
Примечания:
- Поддерживается только на PC/Mac.
- Нельзя добавить основную камеру в качестве вторичной.
- Выбор LOD определяется только основной камерой; вторичные камеры повторно используют данные, отфильтрованные основной камерой, для рендеринга.
RemoveCamera
// Возвращаемое значение: void
public void RemoveCamera(Camera _cam)
Удаляет ранее добавленную вторичную камеру.
| Параметр | Тип | Описание |
|---|---|---|
_cam | Camera | Вторичная камера для удаления |
Пример использования:
m_manager.RemoveCamera(m_camera01);
Примечания:
- Поддерживается только на PC/Mac.
- Рекомендуется вызывать её при уничтожении объекта (
OnDestroy), чтобы очистить ссылку на вторичную камеру.