渲染性能參數設置指南
概述
為適配不同性能的設備硬件,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屬性查詢當前狀態。