RealityCaptureやMetashapeのアライメント結果を3D Gaussian SplattingやNeRFで使うためにCOLMAP形式にデータ変換する手段をまとめてみた。
COLMAPでは難しい複雑であったり規模の大きなシーンのアライメントをRealityCaptureやMetashapeで行い、そのデータを活用するといったものです。
この記事は手段の紹介なので手順の紹介ではないです。
(私の知識不足でやり方がわからんのもある
(手順も追々追記するか別記事で書くかも
COLMAPデータへの変換は1年前くらいから探り始めてたのだけど、ここ最近になって使いやすいツールがいくつか出てきて。ありがたや。
以下A~Fまで手法を上げていますが、現状では
「E」のRealityCapture-to-Postshot
が安定で便利な印象。
A) RealityCaptureのアップデートを待つ
公式のフォーラムで機能リクエストされている。
・https://forums.unrealengine.com/t/support-colmap-export/1277698
投票せよ!そして気長に待つべし。
B) Kaptureで変換する
COLMAPのこのIssue によるとKaptureというものを使うとBundlerのoutファイル経由で変換できるらしい。
” In the meantime, one can probably use Naver/Kapture with an intermediate bundle.out file to produce colmap alignement files from RC. “
・https://github.com/naver/kapture
・https://europe.naverlabs.com/research/3d-vision/kapture/
後述の「RealityCapture-to-Postshot」はこのKaptureが使われている。
Jonathan Chemla氏にコマンド例教えていただいた。
・https://x.com/jo_chemla/status/1786488108747309472
C) COLMAPの images.txt を自作する
RealityCaptureから書き出したcsvからColmapのimages.txtとcamera.txtを作成する
・COLMAP – images.txt
・nakano_muramotoさんの解説記事 – RealityCaptureのregistrationデータを流用する検討
D) blender-photogrammetryを使う
・https://github.com/stuarta0/blender-photogrammetry
・NegativeMindさんの解説記事 – BlenderでPhotogrammetryできるアドオン
RealityCaptureから書きだしたBundlerを読み込む事ができ、そしてCOLMAPに書き出すことも出来る。
(Metashapeから書き出したBundlerでもいけるかは未確認だが、使えるはず?)
E) RealityCapture-to-Postshotを使う
・https://github.com/Maxiviper117/RealityCapture-to-Postshot
RealityCaptureから書きだしたBundlerをCOLMAPに変換出来る。
(Metashapeから書き出したBundlerでもいけるかは未確認)
F) export_for_gaussian_splatting を使う
・https://github.com/agisoft-llc/metashape-scripts/blob/master/src/export_for_gaussian_splatting.py
Metashapeから直接COLMAP形式に変換出来る。
スクリプトで実行するのでPro版が必要。
※追記 先日(2024/9/9)のアップデートでv2.1.3以降はStandardライセンスでもCOLMAP形式に書き出せるようになりました。
番外編 (COLMAP非経由)
COLMAPを経由せずに直接3D Gaussian SplattingやNeRF用のデータに変換できるものもあります。用途によってはこちらの方が簡単で良さそう。
A) Postshotを使う
COLMAPを経由せずにRealityCaptureから直接3D Gaussian Splattingへ持っていきたい場合は「Postshot」が対応しているので便利。
・https://www.jawset.com
具体的な使い方は こちら の記事にまとめました。
B) agi2nerfを使う
Metashapeから直接NeRF(instang-ngp)のtransform.jsonに変換したい場合は「agi2nerf」が有用。
・https://github.com/EnricoAhlers/agi2nerf
C) rc2nerfを使う
RealityCaptureから直接NeRF(instang-ngp)のtransform.jsonに変換したい場合は「rc2nerf」が便利。
・https://github.com/joreeves/rc2nerf
作例
このワークフローを利用して京都の清水寺参道、600mの道程を約2万枚の画像から生成しました。
やりたかったやつ、ついに出来た。
広域3D Gaussian Splatting!
京都清水寺の参道600mを約2万枚の画像から3D復元。
せっかくだから体験可能な形でも用意したいな。#GaussianSplatting pic.twitter.com/WTlMgX9bm1— 龍 lilea (@lileaLab) May 7, 2024
- RealityCaptureで全域アライメント
- Bundler形式で書き出しRealityCapture-to-PostshotでCOLMAP形式に変換
- 公式3D Gaussian Splattingでトレーニング
- UnityGaussianSplattingで編集&描画