3D Splat (3DGS)ファイルの編集、そして圧縮(←ひと手間) 【Threedive AI】
こんにちは、メタバーズのエンジニアです。
3Dガウシアンスプラット(3D Splat)ファイルは、メインの対象物はすこぶる美しく表示されるのですが、モデルの中心から離れるに従って大きなぼんやりした板状のものが現れ始めます。

Scaniverse で撮影した場合は、周囲をトリミングする素晴らしいUIが用意されているのですが、それ以外の手段で作成したファイルには使えません。

以下、順を追って編集と圧縮手順についてご紹介していきます。
SuperSplatで編集
これに変わる編集手段として、おすすめのツールは SuperSplat です。
ブラウザですぐ編集でき、指定した部分を消すことが出来ます。
📝 開発者向けTips: SuperSplat は GitHub でソースコードが公開されており、ローカル起動することも出来ます。
https://github.com/playcanvas/supersplat
ローカル起動すれば秘匿性の高いデータを扱う場合でも安心です。以下の例はローカル起動して撮影しました。
エディタメニューから インポートメニューを開き、3D Splat ファイルを読み込みます。ファイル形式としては、.ply ファイルに対応しています。

中心にある木だけを抜き出してみます。色々な選択手段が提供されていますが、立方体(ボックス)または球体(スフィア)で範囲を指定するのがシンプルです。

上部メニューから選択範囲を反転します。(割と気が付きにくいところにありますが、超重要機能!)


世界が黄色くなったら Deleteキー で周りを削除します。木だけになりました。

SuperSplatで出力(splat)
これをエクスポートします。

エクスポート形式としては、ply と splat、sog が用意されています。最近よく使われるようになった圧縮フォーマットである spz ファイルには対応していません。
でも次に紹介する別ツールを使えば spz ファイルに変換できるので、一旦 splat 形式で出力します。
圧縮(splat → spz)
ブラウザ、コマンドライン様々なツールがありますが、シンプルで使いやすかったのは 3dgsconverter というコマンドラインツールです。
pythonのスクリプトなので、ローカルでセットアップする必要があります。ここでは環境を汚さないよう uv を用いた利用方法を紹介します。
以下は Mac のターミナルで試しました。
# 環境作成
mkdir gsconv
cd gsconv
uv python install 3.10
uv venv --python 3.10
source .venv/bin/activate
# インストール
uv pip install "git+https://github.com/francescofugazzi/3dgsconverter.git"
# 実行
uv run 3dgsconverter --help無事最後のコマンド実行に成功すれば、インストール完了です。
圧縮のコマンドは以下のような指定方法になります。
uv run 3dgsconverter -i tree.splat -o tree.spz --target_format spz --compression_level 9-i 入力ファイル名
-o 出力ファイル名
--target_format 変換先フォーマット(spz)
--compression_level 圧縮レベル(0-9)
他にもノイズを除去するオプションなども存在します。
これで spz 化が完了です。ファイルサイズは以下のようになりました!
tree.splat 11.2MB → tree.spz 5.4MB
Threedive AI に配置する(spz)
作成した木を Threedive AI のスペースに配置してみました。球体でくり抜いた地面の部分がいい感じです。

体験はこちらから。(サインインやインストールは不要です)
手順は以上です。
SuperSplatは強力な3D Splat編集ツールですが、入出力ファイルフォーマットが限定されているので、少し工夫が必要です。(SuperSplat が spz に対応したら、この記事の大半は不要になるかも知れません🫠)
Threedive AI には他にもAIモデルを配置して会話する機能や、ギャラリーのように画像を展示する機能など、色々な機能があります。それらも追々紹介していきたいと思います。それではまた!
