8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

3Dシーンをガウシアンスプラッティングで表現する

8
Posted at

3次元のデータを記録・表現する手法として3D Gaussian Splatting(ガウシアンスプラッティング)というものが2023年頃から話題になるようになってきました

空間上の色や透明といった情報を 楕円状のぼんやりした形状の集合で表現するものになるわけですが
今までは現実空間をスキャンする話題が大半でした
(2025年末になって絵をAIで奥行きを生成する等の方法が出てきましたね)

3dgs_img01.png

3D Gaussian Splatting(3DGS)のデータを作るソフトのPOSTSHOTの製品版が出たり
他にもフリーで使える3DGS作成ソフトが出てきたのもあって手持ちの3Dシーンを3DGSで表現することを試してみました
上のキャプチャは 静止画や3Dのメッシュではなく 画像から3DGSに変換中の画面になります

大まかな手順と使用ソフト

今回はBlenderで作成したシーンの中のレンダリング画像を作成して そこから3Dデータを作成しました
画像から3Dデータを作成する大まかな流れとして

  • 画像を解析して撮影したカメラの位置や映っている画素の位置を解析する(SfM)
  • 解析データを元に画像の状態に近い立体を作成する

といった手順を踏むことになります

今回 画像を解析するソフトにはColmapを 3DGS作成にはLichtFeld Studioを使用しました

作業を始める前に 今回の作業に必要なファイルだけを入れる「プロジェクトフォルダ」を先に作っておくことをお勧めします

シーンのレンダリング

まずは変換するシーンの中を様々な視点で見たレンダリング画像を作成します
次の画像解析では共通して映っているものの移動量から カメラの位置や対象の立体的な座標を計算します

スクリーンショット 2025-12-30 000302.png

なので視野角95度のカメラを前後左右と下向きに向けて5つ並べて エンプティの子にして
シーン内を一周歩きまわるようにカーブに沿って移動させるようにしてアニメーションをレンダリングするようにしました

Colmapではカメラの撮影方向の違うものをサブフォルダに分けて保存して同時に解析することで
単一のリグに拘束して撮影したものとして解釈してくれるので カメラ位置の解析精度がより高くなります

Blenderは1つのシーンでは1つのカメラしかレンダリングに利用できません
ただし 1つの.blendファイル内に複数のシーンを作成することができます
なので カメラの方向毎に1つのシーンを作成してコンポジットで出力先を調整することになります

スクリーンショット 2025-12-30 010315.png

キャプチャでは.blendファイルのあるのと同じ場所に「img」フォルダを作成して
視点の違うシーンのレンダリング画像がそれぞれのフォルダに分かれて保存するようにしています

Colmapでの解析

先ほどレンダリングした画像を解析します
colmap.batからGUIを起動して
Reconstruction>Automatic reconstruction を実行すると必要な処理をしてくれます
スクリーンショット 2025-12-30 103155.png

メニューを選択すると出る設定ウィンドウです
Workspaceフォルダで指定した場所の下に解析結果が保存されます
Image Folderで先ほどレンダリングした画像が入っているフォルダを指定します
スクリーンショット 2025-12-30 105152.png
連続画像なので Data typeを Video Framesに設定すると解析速度が結構早くなります
「Run」のボタンを押すと 解析が始まるのでアラートが表示されるまで待ちます。

アラートの背後の画面で 赤色の形状のカメラと 点群が表示されていれば終了です

Colmapデータの書き出し

解析データを 次の処理をするソフトが読み込みやすいように書き出しをします
ExtorasメニューのUnditortionを選択して
スクリーンショット 2025-12-30 134508.png
現れたウインドウのoutput_Pathを指定します
スクリーンショット 2025-12-30 140245.png
ワークスペースフォルダの下に新しくフォルダを作って指定をするといいでしょう
Unditortを押すと必要なデータが指定フォルダ下に書き出されます

設定項目を見ると 本来は画像を指定の状態に一括変換して書き出す機能のようですが
使用していたバージョンではそのように動いていないので
解析に使った画像を書き出されたフォルダにあるimageフォルダの中に一括コピーしてください
image.png

LichtFeld Studioでの変換

いよいよガウシアンスプラッティングへの変換です
先ほどUnditortionで書き出したフォルダをまるごと LichtField Studioの画面にドラッグして
必要な数値を設定した上でStartTraningを押すことで 画像からスプラットへの変換が行われます

LichtFeld Studioの導入・設定に関してはこちらを参考にしました
https://lilea.net/lab/how-to-use-lichtfeld-studio/

まだまだ 発展途上の分野のようで設定については試行錯誤になっていますが
今回のシーンでは画像の状態に近づけようとする計算が進むと逆にぼやけてしまったので
Iterationsの数値を下げて1000に Max Gaussiansを大きくして スプラットの数を300,000と多めにしてみました

今回の内容を書くにあたってデータ作成に使用したのとは別の初期状態のWindowsマシンを用意して進めましたが
こちらではLichtFeld Studio起動しなかったのでキャプチャは改めて添付します

HTML書き出し

LichtFeld Studioは作成した3DGSを ビューアー機能のあるHIMLファイルに書き出す機能があります
試しに今回作成したシーンのデータを書き出してみました
サンプルデータ
こちらをダウンロードの上 Webブラウザで開くとシーンの中を動きまわれます 使用感の参考にしてください
尚こちらはあくまでもデータの変換のサンプルであって再配布や二次利用はしないでください

メモ

いくつか躓いたのでメモ
colmap動かない場合
Visual C++ 再頒布可能パッケージのダウンロードが必要かも

CUDA
https://developer.nvidia.com/cuda-toolkit-archive

コマンドライン

LichtFeld-Studioはコマンドラインからの操作もできるようなので試してみたメモ
C:\Users\user\Documents\LichtFeld-Studio-windows-nightly-2025-12-24\bin\LichtFeld-Studio.exe -d "undeform" -o LFS --eval -i 8000 --max-cap 3000000

まだテスト中の部分もあって 少々消化不良の内容になりましたが、
現時点の内容をまとめてみました
何かの参考になれば幸いです

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?