[blender]3Dスキャンモデルと写真の位置合わせをしてテクスチャとして貼る方法

3DCG

本記事の概要

本記事では、3Dスキャンして得られる3Dメッシュ(3Dスキャンモデル)に対し、カメラで撮影した写真をBlender上で位置合わせしてテクスチャとして貼り付ける手順についてまとめる。

なお本記事で使用するモデルは、LiDARでSLAMをして3次元点群を取得し、CloudCompareなどで点群をメッシュデータに変換して作成したモデルである。このモデルを作成するにあたって使ったSLAMのシステムは色付き点群を出力できないため、その結果得られる3次元メッシュも色がないものである。本記事の方法は、色付き点群を出力できるSLAMシステムを構築しようと試行錯誤した結果、挫折したため苦肉の策で考えた方法である。

本記事の方法を用いてテクスチャを貼った結果

手順の概要

本記事で説明する手順は以下の通りである。なお、本記事ではWindows11でBlenderのバージョン3.6(日本語版)を使用した場合の画面を用いて説明する。

  1. 必要なアドオンをインストールする
  2. 写真撮影位置・条件の特定:カメラの内部/外部パラメータの特定
  3. 撮影位置からの画像の投影

参考

本記事は以下に示すリンク先の情報を参考にした。

・カメラの視点・画角から画像をテクスチャとして投影する方法
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をクリックする

手順①-C・Dの操作画面

手順②:写真撮影位置・条件の特定:カメラの内部/外部パラメータの特定

本手順は基本的に以下の動画の内容を要約したものなので、詳細については動画を確認されたい。

手順②-1:準備

A.3DスキャンモデルをBlenderにインポートし、カメラで撮影した写真を下絵として表示する
→3Dスキャンモデルは点群でなくメッシュデータになっていることを確認すること

手順②-1-A

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

手順②-1-B

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

手順②-1-C

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

画像の読み込み
不要なタブをひっこめる

手順②-2:マーカーの配置とパラメータの演算

この手順では、画像と3Dスキャンモデル上の対応点にマーカーを配置し、CameraPnPointの機能でカメラの内部/外部パラメータを計算する。カメラの撮影位置を計算するにあたり、カメラの焦点距離等の内部パラメータが既知な場合はマーカーは4つでいいらしいが、カメラの撮影位置と内部パラメータの特定を両方とも行うためにはマーカーは6点配置する必要がある。

A.動画クリップエディター画面で写真上にマーカーを配置する:画像上の特徴点上で「Ctrl+右クリック」をする

手順②-2-A

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

ドープシート画面の開き方
マーカー(2D)の名前の確認

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

エンプティの追加方法

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

スナップの設定

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

エンプティの移動・複製

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

エンプティを別のコレクションに移動する

D.カメラキャリブレーションとカメラ位置の計算をする

①動画クリップエディター画面でエンプティの格納されたコレクションを選択

動画クリップエディター画面でエンプティの格納されたコレクションを選択

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

アクティブカメラを選択し、カメラキャリブレーション&位置計算
出来上がり

手順③撮影位置からの画像の投影

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

動画クリップエディター画面は使わないので消す
画面下側でシェーダーエディター画面を開く
テクスチャを貼るメッシュを選択し、マテリアルを作成・追加
マテリアルノード作成手順①
マテリアルノード作成手順②
マテリアルノード作成手順③
マテリアルノード作成手順④:テクスチャ画像を選択する
UV投影モディファイアを追加する手順①
UV投影モディファイアを追加する手順②
UVマップのアスペクト比を画像に合わせる
データプロパティのUVマップを追加する
マテリアルノードをつなぐ

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

モデリングモードで画像の範囲内の頂点を選択し、「選択→反転」で選択領域を反転
画像の範囲外のメッシュに別のマテリアルを割り当てる
完成

コメント