1. はじめに
前回に引き続き、3D gaussian Splattingモデルを作ってみる。前回はnerfstudioで3DGSモデルを作成したが、今回は、COLMAPとƒVDB-Reality-Captureを使って作成してみた。
2. 環境
筆者環境以下の通り。
| 項目 | 内容 |
|---|---|
| OS | Kubuntu 24.04.04 |
| CPU | Ryzen 5 7600 |
| メモリ | DDR5-5600 64GB |
| マザーボード | MSI MAG B650 TOMAHAWK WIFI |
| GPU1 | ZOTAC GAMING GeForce RTX 5060 Ti 16GB Twin Edge |
| GPU2 | MSI GeForce RTX 3060 VENTUS 2X 12G OC |
| GPUドライババージョン | 580.126.09 |
2. COLMAPとは
COLMAPとは、複数の写真から物体の3D形状やカメラの位置情報を復元するオープンソースソフトウェア。バラバラに撮られた2D写真の束を解析して、カメラがどこから撮ったのか(位置・角度)を特定し、特徴点を抽出してスカスカの3D点群(Sparse Cloud)を作ることができるツール。COLMAPで作成するSparse CloudがGaussian Spalattingを作る際の入力となる。
3. ƒVDB-Reality-Captureとは
ƒVDB-Reality-CaptureとはNVIDIAが開発・保守を行う、現実世界の物体や空間をデジタル化する「リアリティキャプチャ」のためのソフトウェア。3D Gaussian Splatting(3DGS)の作成を、従来手法(gssplat)よりも圧倒的に高精度かつ高効率に行える(らしい)。
4. 手順
4.1 動画の準備
今回は愛車(自転車)を3DGS化する。スマホのカメラの動画モードで自転車をグルリと撮影。
2週くらい回って全ての部位が動画に収まるように撮影した。
4.2 動画から画像の切り出し
COLMAPへ直接動画は入力できないため、ffmpegで動画から画像を切り出す。
mkdir images
# 動画から画像を3枚/秒で高品質で抽出
ffmpeg -i "input.mp4" -vf fps=3 -q:v 2 "./images/frame_%06d.jpg"
4.2 COLMAPのインストール
次のコマンドでCOLMAPをインストール。
sudo apt update
sudo apt install colmap
4.3 COLMAP起動
COLMAPのGUIを次のコマンドで起動する
colmap gui
4.4 COLMAPのプロジェクト新規作成
File -> New Projectを選択。
データベースのパス(新規作成のため任意のパスでOK)と画像の保存ディレクトリを指定してSaveボタンを押す。
4.5 Feature extraction
Processing -> Feature extractionを選択。
Shared for all imagesにチェックを入れてExtractボタンを押す。Shared for all imagesは、同じカメラで撮影した場合はチェックを入れるものらしい。
Feature extractionが完了すると、Log画面に完了を示すElapsed time: 0.064 [minutes]が出力される。
4.6 Feature matching
Processing -> Feature matchingを選択し、Sequentialタブに移動する。
-
Sequentialを選択: 動画から切り出した画像を入力とする場合に選択 -
loop_detectionにチェックを入れる: 撮影対象の物体の周りを複数回集会して撮影しているため -
vocab_treeを選択:loop_detectionにチェックを入れると、vocab_treeの指定が必須となる。COLMAPの公式サイトからvocab_treeをダウンロードできるので、ダウンロードして選択する。
準備ができたらRunボタンを押すとMatchingが開始される。処理完了まで待つ。
4.7 Reconstruction
Reconstruction -> Start Reconstructionを選択すると、撮影時のカメラの位置・向きと3次元点の座標の推定が始まる。
今回は、自転車の周りを周回したので、最終的に以下のような出力となった。
4.8 Reconstruction結果の保存
Extras -> Undistortionから、output_path(結果の保存先)を指定して、Undistortボタンを押す。これでCOLMAPの処理結果が保存できる。
4.9 ƒVDB-Reality-Captureのインストール
ƒVDB-Reality-Captureはpythonのライブラリのため、pythonの仮想環境を構築し、インストール。
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
pip install fvdb-reality-capture fvdb-core==0.3.0+pt28.cu128 --extra-index-url="https://d36m13axqqhiit.cloudfront.net/simple" torch==2.8.0 --extra-index-url https://download.pytorch.org/whl/cu128
4.10 3DGSの構築
ƒVDB-Reality-Captureをインストールすると、frgsコマンドが使用できるようになる。
以下のようにCOLMAPの出力結果保存ディレクトリを指定して実行するだけでよい。
筆者の環境では、3DGSの構築にコマンド実行完了まで15分ほどかかった。
frgs reconstruct ./colmap_output -o bike.ply
4.11 結果の確認
生成されたPLYファイルをSuperSplatにドラッグ&ドロップする。
無事、自転車の3DGSが表示された。
5. まとめ
今回は、COLMAPとƒVDB-Reality-Captureを組み合わせて、3D Gaussian Splatting(3DGS)モデルを作成した。環境構築やコマンド操作も比較的シンプルであり、実世界の物体をデジタル化する強力な手法として非常に有用であると感じた。
参考
3DGSからのメッシュの作成
ƒVDB-Reality-Captureのfrgsコマンドは作成した3DGSのPLYファイルから、メッシュを生成することもできる。
CUDA_VISIBLE_DEVICES=1 frgs mesh-dlnr bike.ply -o bike_mesh.ply 0.10
# このコマンドは筆者環境のRTX5060tiではエラーで動作しなかったため、RTX3060で動作させるためCUDA_VISIBLE_DEVICESを指定して実行した。
MeshLabで生成したメッシュを表示した様子。
おまけ
こちらは、一眼レフで撮影した44枚の画像から作成したガンダムの3DSGS。












