「instantNeRFで遊ぶ Advent Calendar 2022」の17日目です。
今日はinstantNeRFのGUI画面に再生されるモデルの姿勢をあらかじめ調整する方法を検討します。
業務外の個人的な検討活動です。
警告
環境や入力内容によっては現在使用できている状況が壊れることがあります。
あなたの責任と判断で試してください。私は責任を取りません。
テストデータ
sketchfabのNefertiti statueを使用させていただきました。ありがとうございます。
colmap2nerf.py
colmap2nerf.pyの中身を確認しました。
COLMAPのimages.txtのカメラの位置と向きのデータがNeRF用に変更されていました。
281行目で合計した上向きの数字を使い、300行付近でカメラの向きを変える処理をしていましたのでkeep_upというparserを作ってその処理を飛ばすようにしました。
Blender 画像を作成
彫像がZ方向に立ち上がった姿勢にしたいのでカメラの配置を変えて画像を生成しなおしました。
RealityCapture モデルの姿勢を調整
Blenderで使ったカメラの配置に合わせてALIGNMENT / Align Imagesにおいて各画像の1Ds / Prior pose Absolute poseを修正し、モデルの姿勢を変更します。
COLMAP model_aligner
カメラの数が少なく分かりやすく配置したのでカメラは位置データを手入力で修正しました。
予め実行して生成してたモデルデータをCOLMAP model_alignerで修正します。12/5の方法を使いました。
testbed.exe
修正されたモデルデータをCOLMAPでtextデータに変更し、colmap2nerf.pyで生成したtransform.jsonを使いinstantNeRFを実行しました。
12日目に説明した2番目の方法です。
(ngp) D:\git\instant-ngp>python scripts/colmap2nerf.py --aabb_scale 4 --images data/2212142b --out 2212142b.json --keep_up
座標系の考察
それぞれのツールの座標系を検討しました。使用したツールは図の左から並べました。カメラのアイコンは向きを[0, 0, 0]にした状態です。
instantNeRFの画面の座標の向きを基準に回転させたのが下の図です。この状態だとモデルは逆さで後ろ向きになるようです。
RealityCapture モデルの姿勢を再調整
instantNeRFの画面の座標でカメラに正対するようモデル(頭がZ-、顔がY+の方向)とカメラを配置しなおしました。
testbed.exe 再調整後
まとめ
colmap2nerf.pyにup変更させない機能を追加しました。
instantNeRFの座標を考慮しRealityCaptureでモデルとカメラの向きを調整し、カメラの座標をCOLMAPへ入力することでinstantNeRFで再生するモデルの初期姿勢を変更しました。
参考