本記事の概要
本記事では、3Dスキャンして得られる3Dメッシュ(3Dスキャンモデル)に対し、カメラで撮影した写真をBlender上で位置合わせしてテクスチャとして貼り付ける手順についてまとめる。
なお本記事で使用するモデルは、LiDARでSLAMをして3次元点群を取得し、CloudCompareなどで点群をメッシュデータに変換して作成したモデルである。このモデルを作成するにあたって使ったSLAMのシステムは色付き点群を出力できないため、その結果得られる3次元メッシュも色がないものである。本記事の方法は、色付き点群を出力できるSLAMシステムを構築しようと試行錯誤した結果、挫折したため苦肉の策で考えた方法である。

手順の概要
本記事で説明する手順は以下の通りである。なお、本記事ではWindows11でBlenderのバージョン3.6(日本語版)を使用した場合の画面を用いて説明する。
- 必要なアドオンをインストールする
- 写真撮影位置・条件の特定:カメラの内部/外部パラメータの特定
- 撮影位置からの画像の投影
参考
本記事は以下に示すリンク先の情報を参考にした。
・カメラの視点・画角から画像をテクスチャとして投影する方法
horohorori.com/blender-note/modifiers/modify/about-uv-project-modifier
・画像からカメラの内部/外部パラメータを特定するアドオン:Camera PnPoint
手順①:必要なアドオンをインストールする
A.Blender用アドオン「Camera PnPoint」をダウンロードする
→Superhive(旧Blender Market)からダウンロードすると$5
superhivemarket.com/products/camera-pnpoint
→gumroadからだと$0~(寄付?)
rtstudios.gumroad.com/l/camera_pnpoint
➡とりあえずお試しで使ってみるなら、gumroadからダウンロードしてみるとよいかもしれない。
B.Blenderを「管理者として実行」:Camera PnPointというアドオンを使用するには、依存関係にあるライブラリ「OpenCV」をインストールする必要があるが、ライブラリをインストールするためには管理者権限が必要である。
※:ポイント:「ウィンドウ→システムコンソール切り替え」をすることで、コマンドプロンプト画面が新たに開かれる。この操作をすることでアドオンの依存関係(OpenCV)のインストール進捗状況や成功/失敗の状況がわかる。
C.Edit(編集)→Preference(プレファレンス)→アドオン→インストールで、ダウンロードした「Camera PnPoint」のzipファイルを選択し、インストールする
D.カメラPerspective-n-Pointの左の四角にチェック(有効化)→Install dependenciesをクリックする

手順②:写真撮影位置・条件の特定:カメラの内部/外部パラメータの特定
本手順は基本的に以下の動画の内容を要約したものなので、詳細については動画を確認されたい。
手順②-1:準備
A.3DスキャンモデルをBlenderにインポートし、カメラで撮影した写真を下絵として表示する
→3Dスキャンモデルは点群でなくメッシュデータになっていることを確認すること

B.画面を左右に分割する:3Dビューポートの右端を右クリックし「垂直に分割」を選択

C.分割した画面の左側を「動画クリップエディター」にする:左上のアイコンをクリックし、「動画クリップエディター」を選択

D.動画クリップエディター画面の調整:カメラで撮影した写真を読み込んだり、不要なタブをひっこめる(不要なタブのある画面でNキー)


手順②-2:マーカーの配置とパラメータの演算
この手順では、画像と3Dスキャンモデル上の対応点にマーカーを配置し、CameraPnPointの機能でカメラの内部/外部パラメータを計算する。カメラの撮影位置を計算するにあたり、カメラの焦点距離等の内部パラメータが既知な場合はマーカーは4つでいいらしいが、カメラの撮影位置と内部パラメータの特定を両方とも行うためにはマーカーは6点配置する必要がある。
A.動画クリップエディター画面で写真上にマーカーを配置する:画像上の特徴点上で「Ctrl+右クリック」をする

※:注意!:画像上のマーカーと3Dスキャンモデル上のマーカーは、順番が対応している必要がある。画像上のマーカー名とマーカー位置は、以下の画像の通り「画面を3つに分割」して新たにドープシート画面を開き、ドープシート画面でマーカーを選択すると「動画クリップエディター」上で対応するマーカーが強調表示されることから確認できる。


B.3Dビューポート画面上で3Dモデル上にマーカーを配置する:
①「追加→エンプティ→球」を選択して1個目エンプティを配置する(※:球でなくてもいいかもしれないが、参考動画では球だった)

②スナップをONにし、頂点にスナップするよう設定する:この設定をすることでメッシュを構成する頂点とエンプティの位置をぴったり合わせることができる

③「Gキー」でエンプティを移動したり、「Shift+D」でエンプティを複製し配置する:動画クリップエディター画面で配置したマーカーに対応する数・位置にエンプティを配置する(合計6個 or 4個)

C.エンプティを別のコレクションに移動する:新規コレクションを作成し、動画クリップエディター画面で配置したマーカーに対応するエンプティを格納する

D.カメラキャリブレーションとカメラ位置の計算をする
①動画クリップエディター画面でエンプティの格納されたコレクションを選択

②アクティブカメラを選択(右上のコレクションからカメラの右側のカメラマークをクリックする)し、左側の画面の「Calibration Camera」を選択し、「Solve Camera Pose」をクリックする


手順③撮影位置からの画像の投影
本手順を細かく説明していると非常に長くなってしまうので、画像およびそのキャプションで説明する。詳細は参考リンクを参照。












おまけ:写真の範囲外のマテリアル設定



コメント