見出し画像

建築ビジュアルCG AI活用法⑦ 3Dモデル生成 ~Unity Gaussian Splatting~

こんにちは。STUDIO55技術統括の入江です。
今回も3Dモデル生成関連の話題としてガウス スプラッティング(3DGS)を取り上げます。

前々回のコラムで、LumaAIからUE5で3DGSを使用ができることを確認しました。

また前回は、Splat 編集が可能なことも分かりました。

今回は、UNITYでの使用方法について、解説を交えてお話します。


Unityでの3DGS使用

Unityで3DGSを使用するには、aras-pこと、Aras Pranckevičius氏がGitHubで公開しているUnity用のプラグインを利用します。

Ars-p GitHubページ

こちらのページからzipコードをダウンロードします。

UnityGaussianSplatting ページ

このプラグインには、組み込みのパイプライン(Built-In Render)に加えて、HDRPおよびURPレンダリングパイプラインがサポートされています。
さらに、選択と削除が可能なスプラット編集ツールに加え、楕円体とボックス型の「カットアウト」スプラット編集ツールも備えており、非常に優れた機能を提供します。

ちなみに、3DGSのカットアウト編集ツールは、hybridherbst(ハイブリッドハーブスト) によって初めて実装されました。
ドイツのPREFRONTAL CORTEXでエクスペリエンスデザインと開発プロジェクトマネージャーのFelix Herbst(フェリックス ハーブスト)氏がその人です。

hybridherbst GitHubページ

これにより、すべての3DGS編集ツールがほぼ同じワークフローを持つようになりました。LumaAIやその他のプラットフォームのクロップ機能の元祖です。

ハイブリッドハーブスト : Ellipsoid cutout

このUnity Gaussian Splattingプロジェクトは、驚くべきことにGitHubで1,300以上のスターを獲得した大ヒットプラグインです。
aras-p氏やhybridherbstの名を知らない人はいないというほど有名です。

Unityにスプラットを読み込む

以下、解説を交えて話しをします。

👉 一連の操作を解説と合わせてご覧いただけるよう、画面録画しました。最後にリンクを添付しておきますので、ご確認ください。

使用したのは、Unity(2023.2.20f1)になります。

Unity2023.2 起動時画面

Unity2022以上は必要だったと記憶するので、Unity Hubを確認して対応不可となっている場合には、こちらのリンクから適正なUnityのバージョンをダウンロードしてください。

Unity Downloadページ

Tool > Gaussian Splats > Create GaussianSplatAsset をクリック。

Unity ツールバーからのアクセス

「Gaussian Splat Creator」 が起動します。これを使ってplyファイルを読み込み、Create Asset をクリックしてプロジェクトにインストールします。

Gaussian Splat Creator

プロジェクトデータを、インスペクターのAssetにドラッグ&ドロップ。

画面反映された状態がこちらです。

Unityに3DGSが反映した状態

デフォルトのRender Modeは ”Splats” 。
Splat Scaleも "1" で最適化されています。

まるで写真を見ているようで、とてもこれが3Dシーンだとは思えないレベルです! 3DGSファイルは何度見ても信じられないクォリティを映し出してくれます。
 
レンダーモードはドロップダウンで選択でき、異なるガウス表示モードに切り替えが可能です。

Render Mode 項目

Debug Points

Debug Points

Debug Point Indices

Debug Point Indices

Debug Boxes

Debug Boxes

Debug Chunk Bounds
レンダリングプロセス中のチャンク(データの小さなブロック)の境界を視覚的にデバッグするための機能。

スプラット編集

以前のバージョン (UnityGaussianSplatting-0.7.0) では、Unityのエディター ツール コンテキスト 下部に専用アイコンが追加される形で表記されましたが、現バージョン (UnityGaussianSplatting-0.9.0) では、Unityの通常のツール上に配置されました。ですので、どこにあるのか逆に見つけにくいような場合があるかもしれません。※動画を併用して確認してください。

 もし分かりにくい場合は、インスペクターのEditボタンから操作することもできますので、どちらかの方法で行ってください。

インスペクターにあるEditボタン

マウスドラッグした箇所が、ピンクの楕円形状で選択表示されます。

スプラットの選択画面

変わった形状に見えるかもしれませんが、3DGSを可視化する仕様として納得できます。


3DGSはNeRFと異なり、ニューラルネットワークやMLPを必要とせず、シーンは空間内の点の集合にすぎません。※このことだけでも世界中の研究者の注目を集めている要素になっています。
 
3Dガウス分布iが任意の3Dポイントpに与える影響は以下のように定義されます。

出典:A Comprehensive Overview of Gaussian Splatting

詳細説明は省きますが、3Dポイントのセットが与えられた場合、ブレンディングの概念的なNeRFとの違いの図がこちらです。

左 :光線に沿って連続KLPをクエリ
右:指定された光線に関連するガウス分布の離散セットをブレンド
出典:A Comprehensive Overview of Gaussian Splatting

これを見ても、光線(ray)にガウス分布がセットされた楕円のカラーレンダリングで構成されているのが分かります。3次元ガウシアンは図のような楕円の回転体のようなイメージを多数発生させ、これらを滑らかにつなげることで3次元データとして表すとされています。
 
この意味で、スプラット編集で選択した楕円形状が、ガウス分布を可視化した印象とつながる、ということを言いたかっただけです。
余談でした。


選択をデリート。

デリート削除した画面

被写体をドラッグして選択。

選択を反転。

一気にデリート削除します。

クリーン調整したデータがこちらです。

クリーン調整した状態のデータ

Unityでは、インポートしたスプラット(Ply)を直接編集できるため、とても便利です。

カットアウト編集

インスペクターの「Add Cutout」でヒエラルキーに項目を追加します。

Add Cutout

GSCutoutのインスペクターで、カットアウト形状を「楕円」または「ボックス」から選択できます。

カットアウト編集

楕円形状を縮小して、必要な範囲だけカットアウトした状態がこちらです。

楕円形状のカットアウト

取り出したいオブジェクトが、この楕円形状や長方形のカットアウトで簡単に最小範囲にまで迫ることができます。ここから部分的な選択で削除していけば、最短でデータ整理ができます。

編集データのエクスポート

このUnityのプラグインは、更に編集データをPLYファイルにエクスポートして戻す機能がついています。
ということは、Unity制作者だけではなく、UEなど他の制作者のためにもデータの橋渡しができるという事になります。
 
操作は、インスペクター下部にある「Export PLY」をクリックするだけです。

Export PLY 

ファイル形式はPLY。ファイル名には “-edit” が付加されます。

データ保存画面

★チュートリアル動画

一連の操作動画です。先の解説と合わせてご覧ください。
※BGMが流れます。音量にはご注意ください。


このプラグインの恩恵で、Unityではより厳密なスクリーンスペースクワッドを使用してレンダリングが高速化されるほか、よりきめ細かい編集ツールで個々のスプラットの移動編集、PLYエクスポート時にスプラット変換をベイクする機能、および複数のスプラットをマージするなど、行き届いた内容が見られます。
 
Unityはそれほど使用しないといった場合にも、前回紹介したSUPER SPLATとあわせて3DGS編集用として使用ができる事で、ワークフローの選択幅が広がります。

ということで、私の編集作業はこれで終了とします。
今回はここまでにして、次の作業に移ります。
 
では、また次回!