本記事の内容
今回の記事は、RealityCaptureの操作方法を説明するにあたり、手持ちのフィルムカメラを題材に写真を撮影し、全体の面をモデル化する手順をご紹介していきます。
カメラのレンズ面から180°撮影して、それから裏返して面を180°撮影します。2つの面から撮影を行うことで、360°全体のモデルを作成することができます。
最後には、Tipsとしてコントロールポイントを追加してコンポーネントを結合する手順もご紹介しています。
画像1 完成イメージ
※本記事では、ENTERPRISEライセンスのRealityCapture 1.2.0 を使用しています。記事の中で、マスクデータのエクスポートを行います。データのエクスポートには有償ライセンスが必要となります。エクスポートデータを記事の最後に掲載致しますので、有償ライセンスをお持ちでない方は、ダウンロードしてエクスポートしたファイルをご確認下さい。
目次
RealityCapture とは
RealityCaptureは、複数の写真から3Dモデルを作成することのできるフォトグラメトリソフトウェアです。また、iPhoneシリーズの一部機種に搭載されているLiDARセンサーなどを用いて得られた深度情報から3Dモデルを作成する事もできます。
高い品質と精度の3Dモデルを短い時間で生成することができ、モデリングに対するコストの削減と時間短縮が期待できます。
撮影環境
撮影環境
撮影機種 : iPhone 13 mini
解像度 : 4032×3024
撮影枚数 : 352枚
注意1 :
RealityCaptureでは、対象のオブジェクトに対して全体をくまなく撮影することが必要です。透明なオブジェクトや光沢のあるオブジェクトを撮影した場合、モデルを生成したときに穴が空いてしまうことがあります。また、被写界深度が浅い写真は適切ではありません。ぼやけた画像は3Dモデルの精度が悪くなる原因となります。
撮影中にオブジェクトが移動したり、光の当たり方が変わると、処理に失敗する原因になります。撮影時はできるだけオブジェクトの位置を動かさないようにするとともに、照明の位置を動かしたり、画像の明るさなどが変わらないようにすることが大切です。
撮影方法についてはこちらもご覧ください。
https://indyzone.co.jp/archives/3487
画像2 オブジェクトに対して理想的な撮影方法のイメージ(一例)
オブジェクトのレンズ面を撮影
画像3 レンズ面の撮影
画像4 レンズ面の撮影画像(一部)
オブジェクトのファインダー面を撮影
オブジェクトを裏返し、カメラのファインダー面の撮影を行います。
画像5 ファインダー面撮影時の置き方
画像6 ファインダー面の撮影画像(一部)
注意 2:
レンズ面を撮影した画像群とファインダー面を撮影した画像群は別々に読み込み、それぞれにマスクを作成します。別々のフォルダに分けて画像を保存するなどして、間違えないように注意してください。
RealityCaptureの日本語化
まず、RealityCaptureのUIを英語から日本語に切り替える手順をご紹介します。
RealityCaptureを立ち上げ、「WORKFLOW > Application > Setting」を選択します。
画像7 RealityCaptureの設定
「1Ds」ビューの「Application Settings > UI Language」から、UIの言語を変更することができます。
画像8 言語設定
注意3:
現在日本語のUIは、完全にすべての表示が日本語化されておらず、一部は英語のままの表示となっている部分もありますのでご注意ください。
レンズ面のマスクを作成
次に、画像に対してマスクを作成します。
マスクを作成する手順はレンズ面もファインダー面も同じです
レンズ面を撮影した画像群に対するマスクから作成します。
1.画面レイアウトの設定
RealityCaptureを立ち上げ、まずは作業を行いやすいように画面レイアウトを変更します。
「ワークフロータブ > レイアウト」から画面レイアウトを変更することができます。
「1+1+1 Layout」に設定します。
画像9 画面レイアウトの変更
各ビューの右上のプルダウンメニューからビューの表示を切り替えることができます。
今回は「1Ds」「2Ds」「3Ds」ビューのレイアウトで作業を始めます。
画像10 各ビューの設定
2.画像データの読み込み
レンズ面を撮影した画像群をすべて読み込みます。
「ワークフロータブ > 入力」または「ワークフロータブ > フォルダ」で写真を選択し追加します。
画像11 写真の追加
「2Ds」ビューで読み込まれた画像が確認できます。
画像12 読み込まれた写真の確認
3.ポイントクラウドを作成する
キーボード「F6」を押すか、「アライメントタブ > アライメント」をクリックすることで画像データをポイントクラウドに変換することができます。
画像13 「アライメント」
「3Ds」ビューを確認するとポイントクラウドに変換されたデータを確認することができます。
画像14 アライメント結果の様子
注意4:
「3Ds」ビューでのカメラの操作方法
左クリックで移動
右クリックで回転
中ボタンスクロールでズーム
4.コンポーネントの確認
「1Ds」のビューを確認すると、何枚の画像でポイントクラウドのデータが生成されたのかを確認することができます。複数のポイントクラウドデータが生成された場合には、複数のコンポーネントとして表示されます。
画像15 「1Ds」ビュー
注意5
コンポーネントが複数に分かれてしまった場合、それぞれのコンポーネントに共通する特徴点をコントロールポイントとして追加し、複数のコンポーネントを結合することができます。必ずしも読み込んだ画像すべてを一つのコンポーネントにまとめる必要はありませんが、精度の高いモデルを作成するためにはコンポーネントの結合が必要になることがあります。
ここでは、175枚の画像で生成されたコンポーネント0を使用して作業を進めます。
コンポーネントの結合について、詳しい手順はこの記事の最後にTipsとしてご紹介します。
5.地平面(Ground Plane)の設定
レイアウトをシングルビューに変更し、右上のプルダウンメニューから「3Ds」を選択します。
画像16 「レイアウト」
ポイントクラウドの状態を「3Ds」ビューで確認すると、オブジェクトの向きがビュー内のグリッドと合っていません。これを合わせるために、地平面の設定を行います。
「SCENE 3D > ツール > 地平面の設定」をクリックし、表示されたハンドルを使って正しい向き・角度に調整します。
画像17 現在のポイントクラウドの状態
任意のポイントをダブルクリックすることでカメラ移動の原点を変更することもできます。
画像18 地平面の設定
作業をしやすくするため、「SCENE 3D > VIEW > Residuals」をクリックすることでカメラから伸びている線を非表示にすることができます。
画像19 「Residuals」
「SCENE 3D > VIEW > View Camera」にあるプルダウンメニューからカメラの向きを変更することもできます。
画像20 「View Camera」
6.再構築領域の設定
ポイントクラウドの状態を見ると、モデルとして出力したいデータ以外に不要なものが映りこんでいることが分かります。
再構築領域を設定し、これを修正します。
「SCENE 3D > ツール > 再構築領域の設定」をクリックし、生成したいオブジェクトが含まれる領域を設定します。
画像21 「再構築領域の設定」
画像22 「再構築領域の設定」
7.モデルの生成
「メッシュモデル > 通常詳細」からモデルを生成します。
画像23 「通常詳細」でモデルを生成
画像24 メッシュモデルが生成された様子
8.不要な部分を削除
モデルを作成したいオブジェクト以外の不要な部分を削除します。
「SCENE 3D > ツール > メッシュモデル > なげなわ」から不要な部分を選択します。
画像25 「なげなわ」
画像26 「なげなわ」で選択した様子
注意6:
なげなわツール使用時の操作について
なげなわツールを使用する際は、Shiftキーを押しながら選択で選択範囲の追加、Ctrlキーを押しながら選択で選択範囲の削除、スペースキーを押しながら操作でカメラ移動ができます。
「SCENE 3D > ツール > メッシュモデル > 選択をフィルター」をクリックすることで選択部分を削除することができます。
画像27 「選択をフィルター」
画像28 選択部分が削除された様子
9.マスクを出力
「SCENE 3D > ツール > エクスポート > Depth and Mask(深度とマスクをエクスポート)」から、元の画像群と同じフォルダにマスクをエクスポートします。
画像29 「Depth and Mask」の場所
今回使用するのはマスクのデータのみなので、深度情報は不要です。
「カメラ深度をエクスポート」を「いいえ」に設定します。
画像30 エクスポートの設定画面
画像と1対1で対応するマスクが書き出されます。
画像31 レンズ面のマスクの書き出し結果
注意7
マスクの書き出しに失敗する場合、以下の方法で解決する場合があります。
・プロジェクトを保存し、再度書き出しを実行する。
・メッシュモデルを作成する際に、「プレビュー」で実行している場合、書き出しに失敗することがあります。
ファインダー面のマスクを作成
オブジェクトファインダー面の画像群のマスクを作成した手順と同様に、ファインダー面のマスクを作成します。先ほどの手順1〜9を参考に、ファインダー面の画像群を読み込み、モデルを作成し、不要な部分を削除してマスクを書き出します。
ファインダー面の画像に対しても、1対1で対応するマスクが書き出されていることを確認してください。
画像32 ファインダー面のマスクの書き出し結果
完全なモデルを作成
レンズ面とファインダー面の画像のうち、マスクが作成されたものと対応するマスクをすべて読み込んで完全なモデルを作成します。
注意8
マスクと撮影画像が1対1で存在することを確認し、マスクが存在しない画像は読み込まないでください。また、RealityCaptureでマスクデータを取り扱う場合、画像と同様に対応するマスクも読み込んでください。
マスクとは、画像に写っている不要な部分を覆い隠すための機能です。
RealityCaptureでは、対応させたマスクを準備して読み込みを行うことで、マスクが設定されている部分のみを抽出してモデルに変換することができます。オブジェクトを移動して撮影した画像を読み込む際、マスクがないとポイントクラウドを生成するアライメントの処理が失敗します。今回は撮影の途中でオブジェクトを裏返したため、すべての画像を読み込むためにマスクが必要になります。
「2D」ビュー上でTabキーを押すと、マスクが適用されていることを確認できます。
画像33 マスクが適用された様子
新しいプロジェクトを作成し、マスクの作成の手順1〜7までを参考に、モデルを作成します。
マスクが正しく適用されていれば画像の背景の部分が計算に使用されないため、オブジェクトのすべての面が適用されたモデルを作成することができます。
テクスチャの作成
「メッシュモデル > テクスチャ」からテクスチャを生成することができます。
画像34 「テクスチャ」
画像35 テクスチャが生成された様子
エクスポート
エクスポートは「ワークフロー > エクスポート」から行います。
画像36 エクスポート
様々な形式でエクスポートすることができます。
画像37 エクスポート画面
今回はFBX形式で書き出しを行ったあと、Houdiniへ読み込みました。
注意9
FBX形式は、3Dモデルのテクスチャ、メッシュ、マテリアル、リギング データなどを含むことのできるファイル形式のことです。
画像38 FBX形式でエクスポートしたファイルをHoudiniへ読み込んだ様子
画像39 Houdiniでアニメーションをつけている様子
画像40 Houdiniでアニメーションをつけた結果
こちらの記事の手順で作成した完成データを配布しています。
ファイルは、下記のリンクからダウンロードすることができます。
Tips 1.モデルをスムージングする
画像41 スムージング前のモデル
RealityCapture内で、モデルをスムージングすることができます。
「SCENE 3D > ツール > スムーズツール」をクリック
画像42 「スムーズツール」
パラメータを設定し「スムーズ」をクリックすることでスムージングすることができます。
画像43 スムージングツールのパラメータ
スムージングを行った結果です。
モデルの表面がなめらかになった様子がご確認いただけます。
画像44 スムージング結果
Tips 2.コントロールポイントの追加とコンポーネントの結合
アライメントした結果が複数のコンポーネントに分かれてしまった場合、コントロールポイントを追加し、コンポーネントの結合を行う必要があります。
コンポーネントの結合を行う手順は以下の通りです。
1.画面レイアウトの設定
画面レイアウトを変更し、「1Ds」と「2D」が含まれるビューを表示します。
一つの画面で2つの「2D」ビューが表示されている状態が作業に適しています。
画像45 コントロールポイントを追加する際の画面レイアウト
「1Ds」ビューから、コントロールポイントを追加したい画像を選択し、「2D」ビューに表示させます。別々のコンポーネントから画像を1枚づつ、上下に表示します。
2.コントロールポイントの追加
「アライメント > コントロールポイントの追加」で画像の特徴点を追加します。
画像46 「コントロールポイントの追加」
画像47 コントロールポイントを追加した様子
異なるコンポーネントに属する画像の共通点をコントロールポイントとして設定することで、2つのコンポーネントを結合することができるようになります。
3.コンポーネントのマージ
コントロールポイントの設定が完了したら、「アライメント > コンポーネントのマージ」でコンポーネントの結合を行います。
画像48 「コンポーネントのマージ」
コンポーネントをマージすると、複数のコンポーネントが結合された新しいコンポーネントが作成されます。
コンポーネントをマージすることで、自動的に関連付けされなかった画像同士を関連付けさせることができます。これにより、より多くの画像を用いたコンポーネントを作成することができ、精度の高いモデルを生成することができます。
まとめ
今回の記事では手持ちのフィルムカメラを題材に写真を撮影し、全体の面をモデル化する手順をご紹介しました。特に、撮影した画像の品質は大きく3Dモデルの生成結果に影響します。RealityCaptureを扱っていると、モデル化の処理を実行した後に、写真の枚数不足によるディティールの潰れや、画像のピンボケによってモデルの品質が荒いといった状況に遭遇することがありました。そのため、フォトグラメトリーのための写真撮影に慣れるまでは、多めに写真を撮影したり、色々な角度から様々なバリエーションの写真を撮影すると精度の高い3Dモデルを作成することができます。
本記事の内容が皆様のご参考になれば幸いです。ご覧いただきありがとうございました。
RealityCaptureについて
RealityCaptureは、オールインワンの3Dマッピングおよびモデリングソフトウェアソリューションで、処理速度は市場の他の製品の10倍です。これは、フォトグラメトリ方式で実行できることに対して既成概念の枠を超えたユニークなソフトウェアです。さらに、地上写真をシームレスに何の制限もなく、一工程で簡単に統合することができる唯一のソフトウェアです。