レンダリングパフォーマンスパラメータ設定ガイド
概要
性能レベルの異なるデバイスに適応するため、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 ビデオメモリの最大バッファ空間を設定し、SetMaxRenderSplats はチャンクストリーミングレンダリング中に画面にレンダリングされる Splat プリミティブの数を設定します。したがって、SetMaxRenderSplats で設定した値が SetMaxBufferSplat で設定した値を超えると、切り詰められます。
SDK のレンダリングモード
さまざまなデータとプラットフォームに適応するため、SDK には 3 つの主要なレンダリングモードがあります。パフォーマンスパラメータを正しく設定する前提として、レンダリングモードの理解が必要です。異なるパラメータは特定のモードでのみ有効になるためです。
- SingleRender モード(デフォルト):主に PC/Mac で使用します。このモードでは複数の Renderer を作成できません。つまり一度にレンダリングできる LCC シーンは 1 つだけです。データ量が小さく要件を満たす場合、データは 全量レンダリング されます(全 LOD0 データが読み込まれ、動的 LOD 切り替えなし、最高のレンダリング品質)。LOD0 Splat プリミティブが全量レンダリング可能な総量を超える場合、データは チャンクレンダリング され、ランタイム動的 LOD ストリーミングレンダリング機構で超大規模シーンのレンダリングに適応します。
- MultiRender モード:主に PC/Mac で使用します。このモードでは複数の LCC シーンのリアルタイム混合レンダリングが可能で、すべてのシーンデータが動的 LOD 機構で チャンクレンダリング されます。
- チャンクレンダリングパス:モバイル(iOS / Android)、VR(Pico 4 / Quest 3)プラットフォーム、および PC/Mac の HTTP データソースでは、動的 LOD 機構を用いたチャンクレンダリングパスが使用されます。

SDK の 3 つのレンダリングモードと全量 / チャンクレンダリングパスの関係
全量レンダリングとチャンクレンダリング:
- 全量レンダリング:全 LOD0 データを一度に読み込み・レンダリングし、最高の画質を実現します。PC/Mac の SingleRender モードで、LOD0 データ量が条件を満たす場合のみ有効になります。
- チャンクレンダリング:レンダリングカメラのフラスタムに応じて LOD レベルデータを動的に読み込み、オンスクリーン Splat 数を制御し、ビデオメモリと性能が限られたハードウェア環境に適応します。
SDK のデフォルト値
各プラットフォームのデフォルト値、最小許容値、最大許容値は以下のとおりです(単位:万)。
| 項目 | デフォルト値 | 最小許容値 | 最大許容値 | 備考 |
|---|---|---|---|---|
| グローバル Buffer | PC/Mac: 3000 モバイル: 300 VR: 100 | 100 | PC/Mac: 4450 モバイル: 600 VR: 200 | SetMaxBufferSplat() で制御 |
| 全量レンダリング閾値 | 2500 | 100 | 4450 | SetFullRenderSplat() で制御。PC/Mac SingleRender モードのみ有効 |
| チャンクオンスクリーンレンダリング数 | PC/Mac: 2000 モバイル: 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 を作成する必要があります。この操作では、
Dispose()ですべての Renderer を破棄して Buffer を解放し、その後GetRender()で Renderer を再取得する必要があります。 - 現時点の推奨:デフォルト階層を 高 に設定し、階層切り替え時はグローバル Buffer を変更せずに維持しますが、全量 / チャンクレンダリングの切り替えは処理します。
注意事項
SetMaxBufferSplat()は最初、理想的にはGetRender()の前に設定する必要があります。シーン実行後にこの値を設定した場合は、Dispose()ですべての Renderer を破棄してから Renderer を再取得しないと有効になりません。SetFullRenderSplat()は PC/Mac SingleRender モードのみ有効で、Load()の前に設定する必要があります。SetMaxRenderSplats()はすべてのチャンクレンダリングに適用され、いつでも設定できますが、SetMaxBufferSplat()より後でなければなりません(そのメソッドを呼び出す場合)。
レンダリングパフォーマンス API
SetMaxBufferSplat
// 戻り値: void
public void SetMaxBufferSplat(int _count)
最大 GPU Buffer 容量(Splat 数)を設定します。RenderCore パス(MultiRender / SingleRender チャンク)では、共有グローバル 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()の前に呼び出す必要があります。さもないとエラーになり戻ります。 - 先に
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 プラットフォームのみ対応。他のプラットフォームで呼び出すとエラーになり、直接戻ります。
- 任意の
Renderer.Load()の前に呼び出す必要があります。 - 先に
SetPlatformTypeを呼び出す必要があります。 - 値の範囲
[100, 4450](つまり 100 万〜4450 万)。
SetMaxRenderSplats
// 戻り値: void
public void SetMaxRenderSplats(int _count)
チャンクレンダリングで毎フレーム画面にレンダリングされる Splat の最大数を設定します。Load() 後に動的に呼び出せ、SetMaxBufferSplat で設定した上限でクランプされます。SingleRender 全量レンダリングモードで呼び出しても効果はありません(警告をログ出力して直接戻ります)。
| パラメータ | 型 | 説明 |
|---|---|---|
_count | int | 3DGS Splat 数。単位:万。最小 10 万、最大は SetMaxBufferSplat() で設定した Buffer サイズ以下 |
使用例:
lccManager.SetMaxRenderSplats(2000); // 2000 万ポイント
説明:
- 単位は「万」です。渡した値 × 10000 = 実際の Splat 数。
- 実行時に動的に調整できます。
SetMaxBufferSplatで設定した容量上限を超えてはいけません(超えた場合は自動でクランプされ、警告をログ出力します)。- SingleRender 全量レンダリングモードでは実行時調整に対応していません。
SetStartLod
// 戻り値: void
public void SetStartLod(int lod)
LOD 展開の開始点を設定します(0 始まり)。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("全量読み込み完了"));
説明:
- PC/Mac プラットフォームのみ対応。モバイル / VR で呼び出すと警告をログ出力して戻ります。
- 設定は次の
Load()呼び出しで有効になり、現在読み込み済みのデータセットには影響しません。 IsRenderAllプロパティと併用して現在の状態を照会できます。