Unityで3D Gaussian Splatting (ガウシアンスプラッティング) を表示する方法として、aras-p氏の「Gaussian Splatting playground in Unity」があります。
前半でそのセットアップ方法、
後半で便利な機能 (Splatの編集/合体/書出) をまとめてみました。
セットアップ編
リポジトリにアクセスし、コードをクローンまたはDownload 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」をクリック。
続いて、シーンの設定。
Add Componentで「Gaussian Splat Renderer」を追加します。
ゲームオブジェクト名は何でも良いが、ここでは分かりやすくGaussian Splat Rendererとしておく。
Data Assetの欄に、変換したGaussianSplatAssetを設定する。
この時以下のエラーが出る場合は、一旦Unityを再起動する。
GaussianSplatting.Runtime.GaussianSplatRenderer.InitSortBuffers (System.Int32 count)
位置、向き、スケールは通常のゲームオブジェクト同様にTransform欄で調整できます。
Splatの編集
Splatを選択して移動や非表示にしたり、キューブやボックスを使った非表示処理が可能です。
選択して編集する場合
編集したいSplatRendererを選択し、②のツールを選択し、③のツールを有効にします。
この状態でSceneビュー上をドラッグするとSplatが選択出来ます。
選択されたら、ギズモでの移動や、Deleteを押せば非表示に出来ます。
ボックスや楕円体を使って一括で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コンテンツがんがん作っちゃおうー。
(編集ツールとしても便利)