🍞

Reality Captureでフォトグラメトリをして、clusterにリアリティの高い3Dモデルを持ち込む

2024/12/18に公開

https://adventar.org/calendars/10581
この記事は、「Cluster #1 Advent Calendar 2024」18日の記事です。

💡フォトグラメトリとは

フォトグラメトリはオブジェクトを様々な角度から撮影することで、3Dモデルを生成する技術のことです。

Reality Captureで生成された、薪のフォトグラメトリデータ

今回はReality Captureというフォトグラメトリソフトウェアを使用して、フォトグラメトリを作成します。Reality Captureは、年間総収益が100万ドルを超えなければ無料で使用することができます。

💿Reality Captureをインストールする

Reality CaptureはEpic Games Lancherからインストールすることができます。まだEpic Games Lancherをインストールしていない場合は、下記リンクからダウンロードしてインストールします。
https://www.capturingreality.com/DownloadNow
サインインした後、Unreal Engineのタブを開いて、画面上部からReality Captureを選択。Downloadを押してダウンロード・インストールします。
インストールが終わったら起動をクリックして、Reality Captureを起動することができます。


起動したReality Captureの画面

💪フォトグラメトリを作ってみよう

今回はこのフレンチトーストのフォトグラメトリモデルを作っていきます。

📷1. フォトグラメトリのための写真を撮影する

今回はスマートフォンのカメラを使用して撮影しました。動画としてオブジェクトを様々な方向からスキャするように撮影します。

撮影時に意識すること

  • カメラをできる限りゆっくり動かして撮影する
    ピントが合っていなかったり、手ブレでボケてしまった画像はフォトグラメトリの生成時にノイズとなって今う可能性があります。
    シャッタースピードを速くすることで、ブレの少ない画像を多く撮影することもできます。
  • 明るい環境で撮影し、撮影するカメラで影が出ないようにする
    オブジェクト全体が明るくなるような場所で撮影しましょう。手元にライトを持って、カメラの影が落ちないようにするのもいいかもしれません。
    屋外で撮影するときは、曇り空がベストです。
  • 撮影をするときは、周りの環境を気にする
    フォトグラメトリの撮影って一見怪しいので、公共の場で撮影するときはほかの利用者の迷惑にならないようにしましょう。また公共施設のスキャンをするときには。事前に施設の管理者に許可を取ってから撮影するようにしましょう。

フォトグラメトリは素材によって難易度が変わる

以下の素材はフォトグラメトリでは再現が難しいので、フォトグラメトリで表現するには工夫が必要です。

  • 光沢のあるものや反射のあるもの
    カメラの視点によって物体表面上の見た目が変わってしまうため、フォトグラメトリの生成が難しくなります。
  • 半透明の物体
    メッシュを生成するフォトグラメトリの仕組みから、再現することができずメッシュの生成結果が崩れる原因になります。

🖼️2. Reality Captureに動画を読み込む

Reality Captureを起動して、撮影した動画ファイルをドラックアンドドロップで開きましょう。
Reality Captureでは動画からフォトグラメトリを生成することができないため、一度画像に変換する必要があります。ダイアログで抽出間隔に設定した秒数ごとに、画像を切り出します。
1を設定した場合は、1秒間隔に画像へ変換します。

📈3. アライメントを実行する

アライメントタブを開き、アライメントをクリックして実行します。

このアライメントの処理によって、画像の特徴点を検出します。これによって各画像同士の視差を検出することで、画像のカメラアングルの3D空間上での位置を推定します。
アライメントが完了すると、カメラアングルの推定結果をもとにビューポート上にカメラが表示されます。

うまく全体を撮影することができて、位置推定が問題なくできれば一つのモデルとして認識されますが、場合によっては複数のモデルとして分離してしまうことがよくあります。
画面左上の1Dsウィンドウにはアライメントによって生成されたグループである、コンポーネントが一覧で表示されています。今回の場合だと、3つのコンポーネントに分離してしましました。
今回はこのまま進めて、後の処理でコンポーネントを一つにまとめる作業を行いますが、あまりにもコンポーネントが多数に分裂してしまった場合などは、画像の量を減らしたり、一部分だけ画像を読み込んだ状態でアライメントを行って、少ない数のコンポーネントにならないか試してみましょう。

🎁4. メッシュを生成する

まずは最も多くのカメラによって構成されているコンポーネントで、アライメント結果を基にメッシュを生成してみましょう。
メッシュを生成するコンポーネントを選んで、MESH MODELタブから、Normal Detailを選択してメッシュを生成します。

メッシュが生成されましたが、まだ色はついていません。

🖌️5. テクスチャを生成する

MESH MODELタブから、Textureを選択してメッシュを生成します。

一つ前の手順で生成したメッシュにテクスチャが生成されて、色がつきました。

🔧6. コンポーネントをマージする

コンポーネントをマージするには、コントロールポイントを画像に設定して、手動で特徴点を設定することでマージすることができます。

6-1 コントロールポイントを作成する

マージしたいコンポーネントの画像と、マージ先のコンポーネントの画像を見て、どちらの画像にも見えている特徴的な部分を見つけます。

例えば、この2枚の画像だと、丸印で囲った部分にコントロールポイントを作成するとよいでしょう。

コントロールポイントを作成するには、アライメントタブからAdd Control Pointsを有効にして、コントロールポイントを作成する場所をクリックします。

画像をクリックしてもよいですし、ビューポート上でメッシュをクリックすることで、関連する画像すべてに自動でコントロールポイントを設定できます。

片方のコンポーネントにコントロールポイントを作成したら、他のコンポーネントにも同じ位置にコントロールポイントを作成します。

6-2 コンポーネントをマージする

コントロールポイントを作成を作成したあと、アライメントタブを開き、コンポーネントのマージをクリックして、コンポーネントをマージします。
新たにマージされたコンポーネントが作成されますが、作成された結果がマージされていない場合は、コントロールポイントの数を増やすなどの調整が必要です。

🌍7. メッシュの向きを調整する

生成されたメッシュは、地面から傾いてしまっています。

  1. メッシュの傾きを補正して水平にするために、水平な面に3つのコントロールポイントを作成します。

    水平面にpoint3,4,5を作成
  2. SCENE 3DのTOOLSタブを開き、Set Reconstruction Regionのドロップダウン内にある、Set Region from Control Pointsを選択します
  3. 作成した3つのコントロールポイントを選択します
  4. SCENE 3DのTOOLSタブを開き、Set Ground Planeのドロップダウン内にある、Set Ground by Reconstruction Regionを選択します
  5. SCENE 3DのTOOLSタブを開き、Set Reconstruction Regionを選択します

    これで、作成したコントロールポイントの面を水平面として、メッシュの向きを調整することができます。

💾メッシュの軽量化

フォトグラメトリで生成されたメッシュは非常に重いデータです。
フレンチトーストのフォトグラメトリをNormal Detailで生成した結果では、320万ポリゴンになりました。今回は別途フレンチトーストの軽量化モデルを作成してReality Cpatureにインポートして、テクスチャを投影する手法で軽量化をします。

📼1. Reality Captureからメッシュをエクスポート

ワークフロータブを開き、Exportを選択します。Dense Mesh Model and TexturesのカテゴリのAutodesk's file format(*.fbx)を選択します。


書き出し設定は画像の通りです。テクスチャをエクスポートをはいにすることで、生成されたテクスチャをエクスポートすることができます。

🎨2. モデリングソフトにメッシュをインポートしてモデリング

今回はMayaを使用してモデリングを行うため、エクスポートしたfbxファイルをMayaにインポートして、テクスチャをマテリアルに割り当てました。

今回はフレンチトースト部分のみのモデルを制作したかったため、フォトグラメトリモデルに合わせて、フレンチトーストの大まかな形をモデリングし、UVも展開しておきます。

作成したモデル

フォトグラメトリのモデル

UV

🍞3. Reality Captureにモデルをインポートして、テクスチャを投影する

作成したモデルをFBX形式でエクスポートしておきます。Reality CaptureでMESH MODELタブを開き、Import Modelを選択してエクスポートして置いたモデルをインポートします。

テクスチャを投影するために、SCENE 3DのTOOLSタブを開き、Texture Projectionを選択します。

1Dsウィンドウに、モデルのテクスチャ投影ツールが表示されるので、ソースモデルにフォトグラメトリで生成したモデル、結果モデルにインポートしたモデルを割り当てます。一番下の再投影ボタンを押して、テクスチャを投影します。


再投影の結果
再投影した後、1. Reality Captureからメッシュをエクスポートと同じ手順でモデルをエクスポートすることで、テクスチャを画像形式でエクスポートすることができます。

🎉完成

完成したモデルにテクスチャを割り当てて、Maya上でレンダリングしました。

フレンチトースト以外の皿やメープルシロップは別でモデリングをしています。

320万ポリゴンあったモデルも、テクスチャの投影を行うことで、今回は1500ポリゴン程度まで削減することができました。
これであれば、clusterのワールドの小物としてフォトグラメトリのモデルを活用することができると思います。
ただし、クラフトアイテムとして販売するためにフォトグラメトリを使用する場合は、フォトグラメトリの被写体の権利関係を明確にしたうえで利用するようにしてください。

みなさんもReality Captureでフォトグラメトリをして、ワールドの小物などにぜひ活用してみてください!

Discussion