統合スプラットレンダリング
統合スプラットレンダリングは、PlayCanvasにおけるGaussian splatsの推奨レンダリングモードです。複数のスプラットコンポーネント間でグローバルソートを可能にし、プロシージャルスプラット、LODストリーミング、GPUベースのスプラット処理などの高度な機能へのアクセスを提供します。
統合スプラットレンダリングは現在ベータ版です。問題が発生した場合は、PlayCanvas Engine GitHubリポジトリで報告してください。
問題点
統合レンダリングがない場合、複数のGSplatコンポーネントは独立してレンダリングされます。各コンポーネントのスプラットは個別にソートされ、コンポーネント自体はバウンディングボックスに基づいてレンダリングされます。このアプローチは以下の問題を引き起こす可能性があります:
- スプラットコンポーネントが重なる際の可視性のアーティファクト
- カメラが移動しコンポーネントのレンダリング順序が変わる際のポッピングエフェクト
- 異なるコンポーネントのスプラット間での不正な深度ソート
解決策:統合レンダリング
統合レンダリングは、ワークバッファを使用した共有レンダリングパイプラインによってこれらの問題を解決します。すべてのコンポーネントのすべてのスプラットが単一の統合ソートで一緒にソートされ、シーン全体で正しいレンダリング順序が保証されます。
アーキテクチャの概要
統合レンダリングパイプラインは、データストレージと操作で構成されます:
GSplatリソース
GSplatリソースはスプラットのソースデータです。2つの形式があります:
- ロードされたスプラット:ファイル(
.ply、.sog)からインポートされるか、LODストリーミング経由でストリーミングされます - プロシージャルスプラット:GSplatContainerを使用してプログラムで作成されます
各リソースはデータフォーマットに従ってGPUテクスチャにスプラットデータを格納します。
ワークバッファ
ワークバッファは、統合モードでGSplatコンポーネントをレンダリングする各カメラ/レイヤーの組み合わせに対して自動的に作成されます。以下のための中間ストレージとして機能します:
- 可視コンポーネントのすべてのスプラットデータがワークバッファにコピーされる
- スプラットはカメラに対する深度でグローバルソートされる
- ソートされたデータはレンダリングの準備が整う
このアーキテクチャにより、グローバルソートやクロスコンポーネントエフェクトなど、すべてのスプラットへのアクセスを必要とする機能が可能になります。
カメラレンダリング
カメラが統合GSplatコンポーネントを含むレイヤーをレンダリングすると、ワークバッファからソートされたスプラットを描画します。これにより、スプラットコンポーネントがいくつ存在するか、またはどのように重なっているかに関係なく、正しい深度順序が保証されます。
ライブサンプル
統合レンダリングと非統合レンダリングの違いを示すGlobal Sortingサンプルをご覧ください。このサンプルでは、統合モードのオンとオフを切り替えて、複数の重なり合うスプラットコンポーネントをレンダリングする際にアーティファクトがどのように排除されるかを観察できます。
メリット
- 視覚品質の向上:複数の重なり合うスプラットコンポーネントをレンダリングする際のアーティファクトを排除
- 一貫したレンダリング:カメラ位置に関係なく正しい深度ソートを維持
- より良いシーン構成:多くのスプラットコンポーネントを持つ複雑なシーンを可能に
- 高度な機能:プロシージャルスプラット、LODストリーミング、GPU処理をアンロック
統合レンダリング機能
統合モード使用時に利用可能な機能:
- スプラットデータフォーマット - スプラットデータのカスタムテクスチャフォーマット
- プロシージャルスプラット - プログラムによるスプラットの作成
- LODストリーミング - 動的な詳細レベルのロード
- スプラット処理 - GPUベースのスプラット操作