UnityGaussianSplattingの使い方

Unityで3D Gaussian Splatting (ガウシアンスプラッティング) を表示する方法として、aras-p氏の「Gaussian Splatting playground in Unity」があります。

前半でそのセットアップ方法
後半で便利な機能 (Splatの編集/合体/書出) をまとめてみました。

セットアップ編

リポジトリにアクセスし、コードをクローンまたはDownload ZIPします。

zipを落とした場合は展開します。

projecsフォルダを開くと、各レンダーパイプライン用のUnityプロジェクトがあります。「GaussianExample」はビルトイン用です。「-HDRP」と「-URP」は名前の通り。

お好みのレンダーパイプラインのフォルダをUnityで開きます。

Unityが起動したら メニュー > Tools > Gaussian Splats > Create GaussianSplatAsset で専用ウィンドウを開く。

UnityGaussianSplattingは.plyファイルをそのまま読み込むものではなく、専用のファイルへ変換が必要で、その変換を行うためのウィンドウです。

Input PLY File:変換したいplyファイルを指定
Output Folder:変換したデータの出力先のフォルダを指定 (Unityプロジェクト内)
Quality:元データを忠実に再現したい場合はVery Highを指定

設定したら「Create Asset」をクリック。

指定したフォルダに変換されたデータが出力されます。

続いて、シーンの設定。

Hierarchyで新規のゲームオブジェクトを作成する。

Add Componentで「Gaussian Splat Renderer」を追加します。

ゲームオブジェクト名は何でも良いが、ここでは分かりやすくGaussian Splat Rendererとしておく。

Data Assetの欄に、変換したGaussianSplatAssetを設定する。

この時以下のエラーが出る場合は、一旦Unityを再起動する。

NullReferenceException: Object reference not set to an instance of an object
GaussianSplatting.Runtime.GaussianSplatRenderer.InitSortBuffers (System.Int32 count)

以上で、Scene上に表示されます。

位置、向き、スケールは通常のゲームオブジェクト同様にTransform欄で調整できます。

Splatの編集

Splatを選択して移動や非表示にしたり、キューブやボックスを使った非表示処理が可能です。

選択して編集する場合

編集したいSplatRendererを選択し、②のツールを選択し、③のツールを有効にします。

この状態でSceneビュー上をドラッグするとSplatが選択出来ます。

選択されたら、ギズモでの移動や、Deleteを押せば非表示に出来ます。

編集結果をもとに戻したい場合は「Reset」が出来ます。

ボックスや楕円体を使って一括でSplatを非表示にしたい場合

編集したいSplatRendererを選択して、「Add Cutout」をクリック。

するとカットアウトするためのオブジェクト「GSCutout」が作られます。
Typeでカットアウトするオブジェクトの形状を楕円体かボックスか選べます。

このカットアウトオブジェクトと重なっている部分のみが表示されるようになります。

「Invert」にチェックを入れると表示部分が反転し、カットアウトオブジェクトと重なっている部分が削除された状態になります。

Splatの統合

複数のSplatデータを合体出来ます。
シーン内に複数Splatがあると描画順がおかしくなってしまう場合などは統合してしまいましょう。

統合したい複数のSplatRendererを選択すると「Merge into ~」ボタンが押せるようになるのでこれをクリックすると1つのSplatオブジェクトに統合されます。

ただし統合できるのは8,600,000Splatまでなので注意。それ以上はエラーとなりマージ出来ません。

Splatの書出

編集や統合をしたSplatデータをplyに書き出せます。

書き出したいSplatRendererオブジェクトを選択して「Export PLY」をクリックです。

以上!
Unityで3DGSコンテンツがんがん作っちゃおうー。
(編集ツールとしても便利)