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