パフォーマンス
スプラットのレンダリングは、CPUとGPUの両方で負荷が高くなる場合があります。良好なパフォーマンスを達成するための戦略をいくつか紹介します:
Gaussian数の制限
シーン内のGaussian数に注意してください。すべてのGaussianは毎フレームカメラの深度でソートされます。特定のGSplatアセットに含まれる数は、SuperSplat EditorのSPLAT DATA Panelを使用して確認できます。SuperSplatを使用して、PLYファイルから不要なGaussianをトリミングしてください。
大規模なシーンでは、カメラ距離に基づいて適切な詳細レベルを動的にロードするLODストリーミングの使用を検討してください。これにより、最も重要な場所で視覚品質を維持しながら、任意の時点でアクティブなGaussian数を大幅に削減できます。
フィルレートの考慮事項
3D Gaussian Splattingは、フィルレート(フラグメント操作)の観点で特に負荷が高いです。これは以下の理由によります:
- 高いオーバードロー:各Gaussianスプラットはテクスチャ付きビルボード(クワッド)としてレンダリングされ、多くの他のスプラットと重なることが多い
- 透明度ブレンディング:スプラットはスムーズな外観を実現するためにアルファブレンディングを使用し、高価なフラグメントごとのブレンディング操作が必要
- フラグメント密度:密集したスプラットクラウドでは、各最終ピクセルに対して数十から数百のフラグメントが処理される可能性がある
この高いフラグメントコストが、3DGSパフォーマンスにおいてピクセル数とレンダリング設定の最適化が重要である理由です。
シーン設定の構成
Gaussian splattingのフラグメント重視の性質を考えると、これらの設定はパフォーマンスに大きな影響を与えます:
Anti-Aliasを無効にする:アンチエイリアシングはピクセルごとに処理されるフラグメント数を増加させ、スプラットレンダリングでは特にコストがかかるDevice Pixel Ratioを無効にする:これにより全体的なピクセル解像度が下がり、処理が必要なフラグメント数が直接削減される
両方の設定は、3DGSレンダリングの主なボトルネックであるフラグメント処理負荷の削減に役立ちます。
LODストリーミング設定
LODストリーミングを使用する場合、品質とパフォーマンスを制御するためのいくつかのオプションがあります。推奨されるアプローチは、シーン内のすべてのGSplatアセットのLOD選択を自動的に管理するグローバルスプラットバジェットを使用することです。
グローバルスプラットバジェット
グローバルスプラットバジェットは、LODストリーミングのレンダリングパフォーマンスを制御する主要な方法です。以下のように設定します:
app.scene.gsplat.splatBudget = 4000000; // 最大400万スプラット
バジェットが設定されると、エンジンはバジェット内に収まるようにすべてのGSplatアセットのLODレベルを自動的に調整します。近くのジオメトリを優先し(より細かいLODを使用)、遠くのジオメトリから先に品質を下げます。これにより、潜在的に表示可能なスプラット数に関係なく、一貫したフレームレートが提供されます。
- バジェット = 0:バジェット適用を無効にし、距離ベースのLOD選択のみを使用
- バジェット > 0:すべてのGSplatアセットに対して指定された最大スプラット数を適用
バジェットシステムは、LODストリーミングアセット(複数の詳細レベルを持つ)と固定アセット(単一の詳細レベル)の両方を含む、シーン内のすべてのGSplatアセットを考慮します。
LOD距離
LOD距離は、各詳細レベルが選択されるカメラ距離を制御します。これらはGSplatコンポーネントごとに設定されます:
entity.gsplat.lodDistances = [5, 10, 20, 40, 80, 160];
各値は、次のLODレベルへの遷移の距離しきい値を表します。値が小さいほど、近距離で高品質になりますが、距離に応じてより速く品質が低下します。
LOD範囲制限
lodRangeMinとlodRangeMax設定は、使用可能なLODレベルを制限します:
app.scene.gsplat.lodRangeMin = 0; // 最高品質のLODを許可
app.scene.gsplat.lodRangeMax = 3; // LOD 3より低くはしない
これらの設定は以下の場合に役立ちます:
- ダウンロードの削減:インターネット接続が遅いデバイスでは、
lodRangeMinを高く設定することで、最高品質(かつ最大サイズ)のLODファイルのダウンロードを防ぐことができます - メモリ制約:LOD範囲を制限することで、特定の詳細レベルの読み込みを避け、メモリ使用量を削減できます
ただし、一般的なレンダリングパフォーマンス管理には、LOD範囲制限よりもグローバルスプラットバジェットの方が効果的です。バジェットはすべてのアセット間で適切なバランスを自動的に見つけますが、LOD範囲制限はカメラ位置やシーン構成に関係なく一律に適用されます。
推奨設定
ほとんどのアプリケーションでは:
- ターゲットハードウェアに適したグローバルスプラットバジェットを設定します(例:モバイルでは100万、デスクトップでは300万以上)
- 特定のダウンロードやメモリの制約がない限り、LOD範囲はデフォルトのままにします(min=0、max=利用可能な最高値)
- 特定の距離での品質遷移をより細かく制御したい場合は、LOD距離を調整します