VRChat Gaussian Splattingの使い方

VRChat Gaussian Splatting』がMichaelMoroz氏により公開されました!

ついにVRChatへも3DGS (3D Gaussian Splatting ガウシアンスプラッティング) のデータが持っていけるように。

早速これを使ったVRChatワールドも作成してみました。
鳥取『米子城跡VR』
※1日で突貫で作ったワールドなもので、まだ最適化できておらず負荷重めなので注意

2025/7/27 追記
本日 VRChat Gaussian Splatting V3 がリリースされました!
使い方が変わっているので、記事前半で「V3」について、後半で「V2」の手順を記載しています。

V3版

プロジェクト作成手順

通常通りVCCで新規プロジェクトを作成。

VRChatGaussianSplattingのリポジトリにアクセス。
https://github.com/MichaelMoroz/VRChatGaussianSplatting

リリースページへアクセス。

.unitypackageファイルをダウンロード。

Unityへ読み込む。

プロジェクトにサンプルシーンがあるのでこれを開いて確認する。

シーンを開くとSplatの密度の低い状態で表示されるがー

シーンを実行すると正しく表示される。

独自のplyを変換する手順

メニューに「Gaussians Splatting」が出来ているので、ここからply変換用のダイアログを表示する。

plyはこちらから読み込む。V3では複数plyのインポートにも対応している。

各オプションの詳細についてはこちら

  • sRGBカラースペースの正確な使用をオプションで無効化できます(グラブパスを2回分削減できますが、透過表現が正しくなくなります)。

  • マルチチャンクレンダリングをオプションで有効化できます。ガウシアンスプラットのマテリアルをN個(デフォルトは76万個)ごとのチャンクに分割して描画します。パフォーマンスが向上する可能性があります。

  • 各パスの間にアルファステンシルマスクを追加することがオプションで可能です。これにより、後続のチャンクのスプラットが見えないように遮蔽されます。パフォーマンスの向上が見込めます。

  • プリソート(事前ソート)付きでインポートすることがオプションで可能です。Gaussian Splat Renderer がなくても動作し、アバターや非VRChatのUnityプロジェクトでも使用できるようになります。

読み込むplyファイルと、変換したファイルの保存場所(Assetsフォルダ以下を指定する)を設定したら、下にあるボタンから変換する。

独自plyデータのシーンへの適応

このデータをシーンに適応させるには、すでに設定が完了しているVRChat Gaussian Splattingのサンプルシーンを編集してしまうのが簡単。

設定が完了したらシーンを実行する。

以上!

V2版

以下は古いV2版の内容ですが、残しておきます。

プロジェクト作成手順

通常通りVCCで新規プロジェクトを作成。

VRChatGaussianSplattingのリポジトリにアクセス。
https://github.com/MichaelMoroz/VRChatGaussianSplatting

リリースページへアクセス。

.unitypackageファイルをダウンロード。

Unityへ読み込む。

ここで以下のエラーが出る場合がある。

Assets\VRChatGaussianSplatting\Scripts\Importer\GaussianFileReader.cs(46,35): error CS0227: Unsafe code may only appear if compiling with /unsafe. Enable “Allow ‘unsafe’ code” in Player Settings to fix this error.

これはエラーメッセージにあるように、Project Settings > Player > Allow ‘unsafe’ Code を有効にする。

プロジェクトにサンプルシーンがあるのでこれを開いて確認する。

開くと描画が発光したような破綻した見た目になっているが-

シーンを実行すると正しく描画される。

ReadmeやWarningの書かれているように、MSAAはオフが推奨との事。

 VRChatでこれを使用する場合、MSAAをオフにすることをお勧めします。パフォーマンスが大幅に低下し、スプラットの視覚的な違いがなくなるためです。

独自のplyを変換する手順

メニューに「Gaussians Splatting」が出来ているので、ここからply変換用のダイアログを表示する。

変換したいplyファイルと変換後のデータを保存するフォルダを指定する。

Importボタンを押して読み込む。

しかしここで失敗する場合がある。

Outputフォルダの指定をUnityプロジェクト外からの絶対パスで指定するとこのエラーになる。
任意のフォルダに書き出したい場合はAssets以下のパスで指定する。

NGの例)

OKの例)

すると変換に成功する。

postshotで作成したplyでも問題なく変換できた。

Splat数はどの程度まで変換できるのかも試してみました。
(2025/07/16時点, メモリ128GB環境での検証結果)

20M Splat:❌️Out of memory 表示

16M Splat:❌️Unityがクラッシュ
12M Splat:❌️Unityがクラッシュ
10M Splat:❌️Unityがクラッシュ

8M Splat:⭕️変換成功

現状では8M Splatが上限か?
(Unityをクラッシュさせない方法がないだろうか)

独自plyデータのシーンへの適応

このデータをシーンに適応させるには、すでに設定が完了しているVRChat Gaussian Splattingのサンプルシーンを編集してしまうのが簡単。

Assets > VRChatGaussianSplatting にある Example Scnene を開き、
Hierarchy の GaussianSplatting > GaussiansSplats に新規のGameObjectを作成し、
Mesh FilterとMesh Rendererのコンポーネントを追加する。

Mesh Filter には VRChat Gaussain Splatting > Resources > Meshes にあるメッシュを指定する。

Mesh Renderer には前の手順でplyを変換したフォルダ内にあるGaussianSplatMaterialマテリアルを指定する。

すると画面上に表示されるので向きなどを調整する。

続いてGaussian Splat Renderer を編集する。

1. Gaussian Splat Rendererを選択
2. SplatObjects を + で追加
3. 前手順で作成したSplatのGameObjectを追加
4. 初期表示させたいオブジェクトの番号に変更

最後にシーンを実行する。

以上!

その他の設定

遠景を表現したい場合

Max Sort Distance の値を上げると遠景まで表現出来た。
サンプルシーンではデフォルトが200になっていたが、これを上げていった比較が以下。

100

1,000

10,000

100,000