多相机渲染开发指南
LCC Unity SDK 支持在单场景全量渲染模式下同时使用多个相机渲染。下面通过一个主相机 + 两个副相机的示例,介绍实现多相机渲染的完整步骤。
步骤 1:创建场景与游戏对象
在 Unity 中创建一个全新的场景,Unity 默认会创建 Main Camera 和 Directional Light。
设置 Main Camera
在 Hierarchy 窗口中选择 Main Camera,在 Inspector 窗口中按下图设置其属性。

设置 Main Camera 的属性
创建 LCCManager
在 Hierarchy 窗口空白处单击鼠标右键,在弹出的菜单中选择 Create Empty,创建一个空游戏对象,命名为 LCCManager,将其 Transform 归一,并通过 Add Component 为其添加 LCCManager 脚本。

创建 LCCManager 游戏对象并添加 LCCManager 脚本
创建 LCCRenderer
在 Hierarchy 窗口空白处单击鼠标右键,选择 Create Empty,创建一个空游戏对象,命名为 LCCRenderer,将其 Transform 设置为 Rotation.x = -90、Scale.x = -1。

创建 LCCRenderer 并设置 Transform(Rotation.x = -90、Scale.x = -1)
注意:
LCCRenderer 游戏对象的 Transform 设置(Rotation.x = -90、Scale.x = -1)是与 LCC 数据坐标系的对齐。关于坐标系对齐的详细说明,参见 Unity SDK 简介 中的「LCC 数据坐标系」。
创建副渲染相机
在 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("Started ");
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] file {m_currentFileIndex} load progress: {_progress:P1}");
}
private void onComplete()
{
Debug.Log($"[LCCRenderer] file {m_currentFileIndex} loaded");
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),否则无法挂载到游戏对象上。- 主相机通过
SetMainCamera设置,副相机通过AddCamera添加;不能将主相机添加为副相机。
步骤 3:挂载脚本并设置属性
- 将
MultiCamera.cs脚本挂载到 Hierarchy 窗口中的 LCCRenderer 游戏对象上。 - 在 Inspector 窗口中,将 LCCManager 游戏对象拖动到脚本的 Manager 属性上。
- 将 Camera01 和 Camera02 游戏对象分别拖动到脚本的 Camera01、Camera02 属性上。
- 在脚本的 File Path01 属性中填写 LCC 文件的路径地址。

挂载 MultiCamera 脚本并在 Inspector 中设置属性
步骤 4:运行
在 Game 窗口中点击 Play 按钮,即可看到场景中多个渲染相机的实时渲染效果。

运行后多个渲染相机同时渲染的效果
关键步骤
实现多相机渲染的关键步骤:
- 确保场景处于单场景全量渲染模式(
SwitchRenderPass(ActiveRenderMode.SingleRender),且数据走 Full Load 路径)。 - 主相机通过
SetMainCamera设置;副相机在场景加载完成后(onComplete回调中)通过AddCamera注册。 - 通过每个相机的 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 通过 LCCManager 提供了以下相机相关 API。副相机需要在 LCC 场景加载完成后(即在 onComplete 回调中)通过 AddCamera 注册。
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)时调用,清理副相机引用。