みなさんこんにちは! ISID 金融ソリューション事業部の松崎です。
前回の記事では「フォトグラメトリによる3Dモデル作成ワークフロー(前編)」と題し、フォトグラメトリを行う上で必要となる機材や、写真撮影前・撮影時の注意ポイントを紹介しました。
まだご覧になっていない方は、是非前編から読んでいただけると嬉しいです!
今回は後編になります。
撮影後のRAW現像手法、RealityCaptureを用いてのモデル作成方法について紹介します。
ワークフロー一覧
フォトグラメトリによる3Dモデル作成のワークフローは、大きく分けて以下に分けられます。
- 機材の準備
- 被写体の確認、撮影環境のロケハン
- 被写体の撮影
- 撮影画像のRAW現像
- メッシュモデル作成
- テクスチャ貼り付け・ローポリ化
後編では、4~6についてご紹介します。
4.撮影画像のRAW現像
写真撮影後のRAW現像手順を紹介します。
RAW現像とは、撮影した生データ(RAWデータ)の明暗・ホワイトバランス・コントラストなどを調整し、JPEG形式などの閲覧可能な形式で出力する処理を指します。
※この手順はRAW形式で撮影したときのみ実施します。JPEG形式などで撮影した(カメラ側で現像が完了している)場合はスキップしてください。
なお、現像・加工時には以下のアプリを使用します。
- Adobe Bridge (Win/mac対応 無料)
- Adobe Photoshop Lightroom (Win/mac対応 有料:1078円/月 ※2023年7月現在)
次行より手順を紹介していきます。
まず初めに、撮影した写真をPCへ移動させ、Adobe Bridgeを使用して開きます。
Adobe Bridgeでは、現像の前準備を行います。
「ツール → ファイル名をバッチで変更」を選択し、写真のファイル名を変更します。
ファイル名を変更するのは、モデル作成時に他の写真が混ざってしまうのを防止するためです。
ファイル名が変更できたら、必要に応じて写真のメタデータにキーワードを設定します。
キーワードを設定することで、写真の絞り込みが容易になります。
今回撮影した写真はメタデータにロックがかかっているので、全写真を選択した後に「右クリック→すべての項目のロックを解除」を選択し、ロックを解除します。
ロックが解除できたら、キーワードを設定します。
今回は全写真に「花壇小」のキーワードを設定しました。
次に、Adobe Photoshop Lightroomを開き、「ファイル→新規カタログ」で新規カタログを作成します。
Adobe Photoshop Lightroomでは、写真の加工・現像を行います。
カタログを作成したら、「読み込み」から写真の読み込みを行います。
ファイル名を変更したファイルを格納したフォルダを選択し、「全てをチェック」で全写真を選択後、「読み込み」を押します。
読み込んだ写真は、「メタデータ→キーワード」から絞り込みを行うことができます。
今回はキーワードを1つしか設定していない為、絞り込みは行いません。
全写真を選択した後に、「現像」を押して写真の加工調整画面に移ります。
画面右のヒストグラムを見ながら、加工調整を行います。
加工を行う際は、可能な限り黒つぶれ・白飛びをなくすように各項目を設定します。
また、広角レンズを使っている場合は適宜レンズ補正も行います。
今回は以下の設定値で加工調整を行いました。
- 露光量:+0.15
- コントラスト:+6
- ハイライト:-50
- シャドウ:+20
- 白レベル:-20
- 黒レベル:+20
- レンズ補正:プロファイル補正を使用(Adobe Sony FE 16-35mm F4 ZA OSS)
調整が完了したら、右下の「同期」を選択し、設定値を他の写真にも同期します。
全写真への同期が完了したら写真を一通り確認し、黒つぶれ・白飛びが発生していないかチェックします。
問題ない場合は、「ファイル→書き出し」を選択し、JPEG画像として現像を行います。
現像を行う際、画質設定は「100」としましょう。(劣化を防ぐため)
現像が完了しましたら、Adobe Bridgeにて現像したファイルを確認します。
この際、ボケなどが発生してフォトグラメトリに適さないファイルは、キーワードを付けて取り除けるようにしておきます。
「geometry」と「texture」のフォルダを作成します。(このフォルダ名は固定です)
「geometry」はRealityCaptureに取り込んだ際に、自動で点群やメッシュモデルの作成用に使われる写真です。
対して、「texture」はテクスチャ作成用に使われます。
メッシュモデル作成時とテクスチャ作成時で別々の写真を使いたい場合は、各フォルダに使用対象の写真を入れましょう。
例:テクスチャ作成時に黒つぶれ・白飛びした写真を使いたい など
今回はモデル作成用とテクスチャ用で写真を分けないので、両方のフォルダにすべての写真を入れます。
以上で加工・現像の手順は完了です。
なお、ボケ画像などを取り除きたい場合は、適宜「geometry」と「texture」フォルダから取り除きましょう。
5.メッシュモデル作成
素材となる写真が揃いましたので、RealityCaptureでメッシュモデルを作成していきます。
なお、RealityCaptureの基本に関してはこちらの記事にて紹介しておりますので、気になる方はご一読頂ければと思います。
まず初めにRealityCaptureを開き、インポート設定を行います。
「Application→Setting」で設定メニューを開き、インポート設定を以下のように設定します。
次に、「ALIGHNMENT→Setting」からアライメント設定を開き、以下を設定します。
- Image overlap:Low
これにより、アライメントの際に写真同士が繋がり易くなります。
(十分な重なりを担保出来ている場合は、「Normal」や「High」でもよい)
設定が完了しましたら、フォルダを読み込みます。
「WORKFLOW→Folder」と選択し、現像した写真を格納しているフォルダを読み込みます。
この際、「geometry」や「texture」フォルダは直接読み込まず、一階層上のフォルダを読み込みましょう。
読み込みが完了したら、「ALIGNMENT→Allign Images」を選択し、アライメントを開始します。
アライメント完了です。(所要時間:約3分)
今回はコンポーネントが分かれることなく、全ての写真が繋がりました。
コンポーネントが2つや3つに分かれてしまった場合は、適宜コントロールポイントを設定しましょう。
全ての写真が繋がっていることが確認出来たら、写真のグループ化を解除して再アライメントを行います。
これにより、写真の位置推定結果がより正確に行われます。
「Images」を選択し、「Ungroup」で写真のグループ解除を行い、再度「Allign Images」を実行します。
再アライメントが完了しました。(所要時間:約3秒)
すべての写真が繋がったコンポーネントが増えていることを確認します。
問題なければ、次にメッシュの構築範囲指定を行います。
赤青緑のポイントがそれぞれXYZ軸に対応しておりますので、これらを動かして範囲を選択します。
メッシュ作成の処理時間を短縮するためにも、メッシュ構築範囲はなるべく狭く設定しましょう。
適切に範囲選択ができましたら、メッシュモデルを作成します。
「MESH MODEL→High Detail」を選択し、ハイクオリティのメッシュモデルを作成します。
メッシュモデルが完成しました。(所要時間:約60分)
特に問題がなければ、次はメッシュの不必要な部分を除去します。
「SCENE 3D TOOLS→Mesh Model→Lasso」を選択します。
Lassoは投げなわツールです。「Shift+左クリック」で範囲追加、「Ctrl+左クリック」で範囲除外を行うことが出来ます。
今回は花壇下の床部分(オレンジで選択されている範囲)が不要であった為、選択した後に「Filter Selection」で取り除きました。
取り除いた後のモデルがこちらです。
なお、RealityCaptureではFilter Selectionを行うごとに新しいモデルが作成される為、取り除く前のモデルも残っています。
除去後のモデル(Model 3)を見ると、およそ5800万ポリゴンであることが確認できます。
6.テクスチャ貼り付け・ローポリ化
最後に、テクスチャの貼り付けを行います。
また、モデルのポリゴン数が多すぎて扱いづらい場合は、適宜ローポリ化を行います。
まず初めに、「Mesh Model→Setting」からテクスチャ設定を変更します。
以下のように設定し、その他はデフォルト設定のままにします。
- Minimal texture resolution:16384×16384
- Maximal texture resolution:16384×16384
- Large triangle removal threshold:100
- Style:Fixed texcel size
- Texel Size:Optimal
これにより、最高解像度のテクスチャを作成することが出来ます。
設定が完了しましたら、「MESH MODEL→Texture」よりテクスチャ作成を実行します。
テクスチャが作成されました(所要時間:約10分)
モデルのテクスチャ部分を見ると、2枚のテクスチャが作成されていることが確認できます。
1枚はdiffuse Map(Albedo Map)と呼ばれるもので、物体の基本色を表しています。
もう1枚はNormal Mapと呼ばれるもので、物体の法線方向ベクトル(細かい凹凸)を表しています。
テクスチャマップの詳細についてはこちらの記事にて紹介されておりますので、是非ご一読ください。
ポリゴン数を減らす必要がない場合は上記で完成です、以下ではローポリ化を行う場合の手順を紹介します。
今回は「5800万ポリゴン→1000万ポリゴン」へのローポリ化を行っていきます。
なお、ローポリ化を行う際に見た目上のクオリティが劣化しないよう、ハイポリ状態で作成したテクスチャのベイク(焼きこみ)を行います。
まず初めに、「SCENE 3D TOOLS→Mesh Model→Simplify Tools」を選択して以下の設定を行います。
- Type:Absolute
- Target triangles count:10000000(ローポリ化後のポリゴン数)
- Color reprojection:Disable
- Normal reprojection:Disable
設定が完了したら、「simplify」でローポリ化を実行します。
ローポリ化後のモデルが作成されました。(Model5)
1000万ポリゴンになっていることが確認できます。
上記でテクスチャの再投影を無効にしているため、テクスチャは作成されておりません。
(画像で色が見えている部分は頂点カラーになります)
次に、ハイポリ状態で作成したテクスチャをベイクする為のUVマップを作成します。
「MESH MODEL→Unwrap」を選択し、以下のようにUVパラメータの設定を行います。
設定値はテクスチャ作成時とほぼ同様ですが、Styleだけ変化している点に注意してください。
- Minimal texture resolution:16384×16384
- Maximal texture resolution:16384×16384
- Large triangle removal threshold:100
- Style:Maximal texture count
- Maximal texture count:1
設定が完了したら、「Unwrap」を押してUVマップ作成を実行します。
UVマップの作成が完了したら、ハイポリ状態で作成したテクスチャをベイクします。
「SCENE 3D TOOLS→Mesh Model→Texture Reprojection」を選択し、以下のように設定を変更します。
- Source model:Model4 (ハイポリ状態のテクスチャを作成したモデル)
- Result model:Model5 (ローポリモデル)
- Normal reprojection:Enable
設定が完了したら、「Reproject」を押してテクスチャのベイクを実行します。
ベイク完了です。
ハイポリ状態の見た目クオリティを保ったまま、ローポリ化することができました。
おわりに
本記事では、フォトグラメトリワークフローの後編として、撮影後のRAW現像手法、RealityCaptureを使ってのモデル作成方法について紹介しました。
写真撮影の際には注意すべき点が多く、また屋外の場合は天候に左右されてしまうのが難しいところです。
たとえ写真撮影が複数日に渡ってしまったとしても、RAW形式で撮影しておけば現像段階である程度明るさを揃えることができますので、基本はRAW撮影がおすすめです。
前後編を通して、一通りのワークフローを紹介できたかと思います。
これからフォトグラメトリを始める方や、既に始めていて悩んでいる方の一助となれば幸いです。
次回以降もフォトグラメトリやその他の3Dモデル作成手法を紹介していく予定ですので、楽しみにしていてください!
現在ISIDはweb3領域のグループ横断組織を立ち上げ、Web3およびメタバース領域のR&Dを行っております(カテゴリー「3DCG」の記事はこちら)。
もし本領域にご興味のある方や、一緒にチャレンジしていきたい方は、ぜひお気軽にご連絡ください!
私たちと同じチームで働いてくれる仲間を、是非お待ちしております!
ISID採用ページ
参考資料
・日本写真印刷コミュニケーションズ株式会社:「フォトグラメトリ」とはどういうもの?
・Adobe Bridge 公式サイト
・Adobe Photoshop Lightroom 公式サイト
・lileaLab フォトグラメトリ手順書
・RealityCapture to Unreal Engine 5
・PBR(物理ベースレンダリング)マテリアル 入門編
執筆:@matsuzaki.shota、レビュー:@wakamoto.ryosuke
(Shodoで執筆されました)