渲染性能参数设置指南
概述
为适配不同性能的设备硬件,LCC Unity SDK 提供了多个渲染性能设置参数。它们分布在 LCCManager 类和 Renderer 类上,主要涉及以下方法:
| 类 | 方法 | 作用 | 调用时机 |
|---|---|---|---|
LCCManager | SetMaxBufferSplat | 设置最大 Buffer 容量(GPU 一次性分配) | 必须在任何 Renderer.Load() 之前 |
LCCManager | SetFullRenderSplat | 设置全量/分块渲染的分界 Splat 数 | 必须在 Load() 之前 |
LCCManager | SetMaxRenderSplats | 设置分块渲染时同屏渲染 Splat 总数 | 分块渲染的任何时机 |
LCCManager | SetStartLod | 设置起始 LOD 层级 | 运行时生效,在 Load() 之后 |
LCCManager | SetDetailLevel | 设置渲染细节级别(微调渲染精度) | 运行时可动态调整 |
Renderer | SetRenderAll | 设置是否强制全量渲染 | 必须在 Load() 之前 |
说明:
上述参数中,Splat 数相关的方法(
SetMaxBufferSplat、SetFullRenderSplat、SetMaxRenderSplats)单位均为万,即传入值 × 10000 = 实际 Splat 数。
注意:
SetMaxBufferSplat 设置的是渲染可用的最大CPU内存和GPU显存buffer空间,SetMaxRenderSplats设置的是分块流式渲染时同屏渲染Splat基元数量,因此SetMaxRenderSplats设置值超过 SetMaxBufferSplat 设置值时会被截断。
SDK 渲染模式
为适配各类数据和各类平台,SDK 共有 3 类主要渲染模式。理解渲染模式是正确设置性能参数的前提,因为不同参数只在特定模式下生效。
- SingleRender 模式(默认模式):主要作用于 PC/Mac 端。该模式下不允许创建多个 Renderer,即只允许同时渲染一个 LCC 场景。当数据量较小且符合要求时,数据会全量渲染(全量加载 LOD0 数据,不使用动态 LOD 切换,渲染质量最好);当LOD0中Splat基元超过可全量渲染总量时,数据会分块渲染,采用运行时动态 LOD 流式渲染机制,从而适应超大数据场景的渲染。
- MultiRender 模式:主要作用于 PC/Mac 端。该模式下允许实时混合渲染多个 LCC 场景,所有场景数据都会分块渲染,采用动态 LOD 机制。
- 分块渲染路径:在 Mobile(iOS / Android)、VR(Pico 4 / Quest 3)平台,以及 PC/Mac 平台下的 HTTP 数据源,都会走分块渲染路径,采用动态 LOD 机制。

SDK 三类渲染模式与全量 / 分块渲染路径的关系
全量渲染 vs 分块渲染:
- 全量渲染:一次性加载并渲染 LOD0 全量数据,画质最好,仅在 PC/Mac SingleRender 模式且LOD0数据量满足条件时启用。
- 分块渲染:根据渲染相机视锥体动态加载 LOD 层级数据,控制同屏 Splat 数量,适配显存与性能受限的硬件环境。
SDK 默认设置值
各平台的默认值、最小允许值与最大允许值如下(单位:万):
| 项目 | 默认值 | 最小允许值 | 最大允许值 | 备注 |
|---|---|---|---|---|
| 全局 Buffer | PC/Mac:3000 Mobile:300 VR:100 | 100 | PC/Mac:4450 Mobile:600 VR:200 | 通过 SetMaxBufferSplat() 控制 |
| 全量渲染分界线 | 2500 | 100 | 4450 | 通过 SetFullRenderSplat() 控制;仅对 PC/Mac SingleRender 模式有效 |
| 分块渲染同屏渲染数 | PC/Mac:2000 Mobile:200 VR:60 | 10 | —— | 通过 SetMaxRenderSplats() 控制;最大值受全局 Buffer 量限制 |
| 是否强制全量 | 否 | —— | —— | 只在 PC/Mac 平台有效,且只用于 SingleRender 模式 |
PC/Mac 端设置策略
针对 PC/Mac 端,建议按下表的画质档位配置参数(Splat 数单位:万):
| 档位 | 全局 Buffer | 全量渲染分界线 | 分块同屏渲染数 | StartLOD | 是否强制全量 |
|---|---|---|---|---|---|
| 极低 | 300 | 300 | 300 | 2 | 否 |
| 低 | 1000 | 1000 | 1000 | 1 | 否 |
| 中 | 3000 | 1900 | 1900 | 1 | 否 |
| 高 | 3000 | 2500 | 2500 | 0 | 否 |
| 极高 | 3000 | 3000 | 3000 | 0 | 否 |
运行时切换档位的注意事项
- 在中 / 高 / 极高档位之间切换时,可以不修改全局 Buffer,处理逻辑非常简单:只需设置全量渲染分界线、同屏渲染数、StartLOD 即可。
- 在涉及极低 / 低档位与其他档位之间切换时,情况较复杂:因为全局 Buffer 可能已开启,需要先销毁原有的全局 Buffer 再创建新的 Buffer。这个操作要求将所有 Renderer
Dispose()掉、释放 Buffer,再通过GetRender()重新获取 Renderer。 - 当前建议:默认档位设为高,切换档位时不修改全局 Buffer,但仍需处理全量 / 分块渲染的切换。
注意事项
SetMaxBufferSplat()必须在最开始设置,最好在GetRender()之前调用。如果在运行后再设置该值,需要将所有 RendererDispose()掉,再重新获取 Renderer 才能生效。SetFullRenderSplat()仅对 PC/Mac SingleRender 模式有效,必须在Load()之前设置。SetMaxRenderSplats()适用于所有分块渲染,可在任何时机设置,但必须晚于SetMaxBufferSplat()(如果有调用该方法的话)。
渲染性能相关 API
SetMaxBufferSplat
// 返回值:void
public void SetMaxBufferSplat(int _count)
设置 GPU Buffer 最大容量(Splat 数量)。在 RenderCore 路径(MultiRender / SingleRender chunk)下决定共享 Global Buffer 大小;在 SingleRender Full Load 模式下会按数据量实际分配,不参考此值。一次性分配,不可动态修改。
| 参数 | 类型 | 说明 |
|---|---|---|
_count | int | 全局统一 Buffer 大小,按 3DGS Splat 数,单位:万 |
调用示例:
lccManager.SetMaxBufferSplat(3000); // 3000 万点(PC/Mac 默认值)
lccManager.SetMaxBufferSplat(4450); // 4450 万点(PC/Mac 最大值)
说明:
- 单位为「万」,传入值 × 10000 = 实际 Splat 数。
- 必须在任何
Renderer.Load()之前调用,否则报错并 return。 - 必须先调用
SetPlatformType。 - 容量越大显存占用越高,按需设置。
- 平台上限:PC/Mac 4450 万,Android/iOS 600 万,VR 200 万;最小值 100 万。
- 默认值:PC/Mac 3000 万,Android/iOS 300 万,VR 100 万。
SetFullRenderSplat
// 返回值:void
public void SetFullRenderSplat(int _count)
设置 PC/Mac SingleRender 模式下全量渲染与分块渲染的分界 Splat 数。当数据 LOD0 的 Splat 数小于此值时走全量渲染路径(独立 GPU Buffer),否则走分块渲染路径。
| 参数 | 类型 | 说明 |
|---|---|---|
_count | int | 3DGS Splat 数,单位:万 |
调用示例:
lccManager.SetFullRenderSplat(2500); // 2500 万点
说明:
- 单位为「万」。
- 仅 PC/Mac 平台支持,其他平台调用直接报错并 return。
- 必须在任何
Renderer.Load()之前调用。 - 必须先调用
SetPlatformType。 - 取值范围
[100, 4450](即 100 万 ~ 4450 万)。
SetMaxRenderSplats
// 返回值:void
public void SetMaxRenderSplats(int _count)
设置分块渲染时每帧最大同屏渲染 Splat 数量。可在 Load() 之后动态调用,受 SetMaxBufferSplat 设置的上限钳制。SingleRender 全量渲染模式下调用无效(LogWarning 后直接 return)。
| 参数 | 类型 | 说明 |
|---|---|---|
_count | int | 3DGS Splat 数,单位:万;最小 10 万,最大不超过 SetMaxBufferSplat() 设定的 Buffer 大小 |
调用示例:
lccManager.SetMaxRenderSplats(2000); // 2000 万点
说明:
- 单位为「万」,传入值 × 10000 = 实际 Splat 数。
- 可在运行时动态调整。
- 不能超过
SetMaxBufferSplat设置的容量上限(超出自动钳制并 LogWarning)。 - SingleRender 全量渲染模式下不支持运行时调整。
SetStartLod
// 返回值:void
public void SetStartLod(int lod)
设置 LOD 展开起点(0-based)。0 表示最精细,数字越大层级越粗。该方法运行时生效,需要在 Load() 之后调用。
| 参数 | 类型 | 说明 |
|---|---|---|
lod | int | 起始 LOD 层级,取值范围 [0, 10],0 为最精细 |
调用示例:
lccManager.SetStartLod(0);
说明:
- 仅对分块渲染有效,取值范围
[0, 10],超出自动钳制。 - 实际生效上限受数据
totalLevels限制。 - 调用后 SDK 会立即生效。
SetDetailLevel
// 返回值:void
public void SetDetailLevel(float sse)
设置渲染细节级别,用于微调渲染精度。值越大渲染越精细、性能消耗越高。
| 参数 | 类型 | 说明 |
|---|---|---|
sse | float | 细分因子,取值范围 [1, 100]。1 = 最粗糙(近距离也不细化),100 = 最精细(所有层级细化到最底层) |
调用示例:
lccManager.SetDetailLevel(50f); // 中等精度
说明:
- 该参数用于微调场景精细度,只作用于分块渲染,默认为40,取值范围
[1, 100],超出自动钳制。 - 采用对数映射:低值区间变化敏感,高值区间变化平缓。
- 运行时可动态调整。
SetRenderAll
// 返回值:void
public void SetRenderAll(bool _renderAll)
Renderer 类方法。设置该 Renderer 是否强制全量渲染,必须在 Load() 之前调用。仅用于 PC/Mac SingleRender 模式:执行时比较 LOD0 数据量与 4450 万上限,如果 LOD0 < 4450 万,则直接使用 LOD0 全量数据渲染;如果 LOD0 > 4450 万,该设置无效(受限于 Unity 最大 GBuffer),会走分块渲染。
| 参数 | 类型 | 说明 |
|---|---|---|
_renderAll | bool | 是否强制全量渲染 |
调用示例:
renderer.SetRenderAll(true);
renderer.Load(filePath, null, () => Debug.Log("Full loaded"));
说明:
- 仅 PC/Mac 平台支持,移动端 / VR 调用会输出 LogWarning 并 return。
- 设置在下次
Load()调用时生效,不影响当前已加载的数据集。 - 可配合
IsRenderAll属性查询当前状态。