動物舎3DモデルをUnityに取込みVRコンテンツに利用
フォトグラメトリは、適切な対象物や場所の選別、撮影条件、ソフトウェア処理性能、モデルデータの軽量化などの点で制約条件が多いものの、実在する建物や空間の3Dモデル制作に有用な手法です。ゲーム業界、建築業界をはじめ、歴史的建造物、考古学的な現物資料の3Dモデルアーカイブで、学術・教育分野での活用も注目されています。
私たちは、東山動植物公園(愛知県名古屋市.日本)撮影許可のもと、一般通路からの手持ちカメラによる写真撮影を行い、フォトグラメトリで動物舎の3Dモデルを制作しました。
この記事では各工程の概要を記載します。動物園のような広い範囲を対象とするフォトグラメトリは初めてで、つまずきも多くありましたので、気づいた点などご紹介します。(もっといい方法あるよ~とか、とても嬉しいです)
なお、本記事の成果物は名古屋大学 工学部/工学研究科 河口研究室様にご発注頂き、名古屋市東山動植物園様の園内を撮影させて頂いたものです。
今回は動物舎3DモデルをUnityに取込みVRコンテンツに利用する目的でしたので、『1つのfbxは10万ポリゴン未満にする』『テクスチャは4K×4枚のjpgにしてデータサイズを抑える』この2点をルールにモデル制作を進めました。(品質の低下を最小限に抑えながらデータサイズを最小限に抑えることは重要です。『10万ポリゴン未満』にはまだまだ改善の余地があります。)
主な制作フローは、1. 撮影、2. フォトグラメトリソフトでの処理、3. モデル修正です。
1.撮影
フォトグラメトリの撮影は、3Dモデルで見せたいところは全部撮る必要があり、対象をなるべく360度ぐるっと一周するような形で複数の角度から写真を撮ります。ディテールを出したい部分については、遠め、中間、近めと徐々に寄っていく撮り方をします。また上空からの写真も撮影できると好ましいです。
今回は動物にストレスをかけないよう、一般の来園者通路から動物舎の周囲を撮影し、 ドローンや一脚等を使う高い位置からの撮影は行いませんでした。
撮影時に気を付けている点は、
・パンフォーカスでボケる部分がないようにする(ぼけはエラーの原因)
・かげや動くものが入らないようにする
・全体がわかるような遠景を撮る
・隣り合う写真は60~80%が被るよう意識しつつも撮りすぎない(多ければ多いほど良きが基本っぽいです。今回は諸々のデータ容量を考慮してなるべく枚数少なく撮影するようにチャレンジしました)
・アライメントが繋がるように撮る
です。
龍 lileaさんの記事を参考にしております:フォトグラメトリで「銭洗弁天VR」が出来るまで(第1回:撮影編)
動物舎の撮影は2つの機材・セッティングで撮影しました。撮影日の状況や機材設定は以下の通りです。
天候:曇り時々晴れ
撮影時間:1月の10時半~16時半(冬なので15時頃から夕陽射す)
撮影機材・設定:
カメラ① Canon EOS 5D、焦点距離24㎜、F値 9~11
カメラ② Sony α7R IV、16㎜~20㎜、 F値 9~13
(一部レンズを変更し50㎜、70㎜も使用)
撮影枚数は動物舎の広さや構造によりばらつきました。ほぼ目線高さからの撮影のみなので撮影枚数は少ないのですが、例えばゴリラ・チンパンジー舎は1,481枚、アジアゾウ舎は575枚、ホッキョクグマ舎は344枚、インドサイ舎は108枚撮影しました。構造が複雑な動物舎は外観、内側観覧通路に分けて撮影したので1000枚超えました。
2.フォトグラメトリソフトウェア処理
フォトグラメトリソフトウェアはReality Captureを使用しました。
2.1 前処理
撮影した写真データをそのまま使用しても問題ありませんが、フォトグラメトリソフトウェアで、より正しいカメラ位置推定、メッシュ、テクスチャ結果を得るのに、Exifタグの削除やLightRoomなどの画像処理ソフトで露出、色収差、ノイズの調整等の前処理を行うことが推奨されています。
今回は、空(そら)が多く映っているエリアの場合、色調整により空のごみポリゴンが増えたため、撮ったままのjpgを使用して進めたりもしました。
2.2 Reality Captureでモデル作成
Reality CaptureはヘルプやCommunity Q&Aを見れば多くのノウハウが記載されています。@jyouryuusuiさんのRealityCaptureクイックスタートで始めるフォトグラメトリは、Reality Captureヘルプウィンドウの日本語説明をされており参考になります。基本的な手順は、写真を読み込み、Workflowに沿って処理をします。
『1つのfbxは10万ポリゴン未満にする』『テクスチャは4K×4枚のjpgにしてデータサイズを抑える』の2点をルールに、トライ&エラーを繰り返し最終的に以下の手順で進めました。
①アライメント、コンポーネント作成:複数に分かれる場合はマージやControl pointsを使い、良さそうなコンポーネントにする。 最初からコンポーネントが分かれると予想が付くものはアライメント作成から別プロジェクトで作成する。
②再構成領域の設定:モデル化に必要な領域に絞ることでモデル計算時間を短縮。
③モデル作成:設定値デフォルトのままNormal Detailで作成。
④ポリゴン数を減らす:Reality CaptureのFilter Selection、Simplifyツールを使用。Filter Selectionで不要なポリゴンを選択削除する。次にSimplifyツールで頂点数とポリゴン数を少しずつ減らしていく。
⑤ テクスチャ生成:概ね綺麗なモデル(3,000万ポリゴン程度)になったら、一度Smoothingツールを使い、その後テクスチ ャーの生成を行う。ポリゴンや頂点数が多いほどテクスチャーは詳細に作られるので、あとで更にポリゴン数を減らしたモデルにこのテクスチャーをリテクスチャリングするため。
⑥ポリゴン数10万ポリゴン未満にする。再度Smoothingツールを使ってモデルの表面を滑らかにする。⑤で作成しておいたテクスチャを、最終モデルにReTexturingツールで適用する。
⑦モデル書き出し:.objと.jpg形式で書き出す。
2.3 事例アジアゾウ舎のモデル制作
撮影した579枚のjpgファイルを読み込み、アライメントを作成したところ、右奥の地面の角度がずれたComponentが作成されました。右奥のComponent と それ以外のComponentをそれぞれ書き出し、 新しいプロジェクトにComponentを読み込んでアライメントを行いましたがうまくマージされなかったため、Control Pointsを追加してアライメント作成・マージ出来ました。575枚の写真のComponentに対して再構成領域を設定し、Triangle count 2億9,933万ポリゴン / Vertex count 1億5,000万点のモデルが出来たのでこれをベースにポリゴンリダクションをしました。
約3億のポリゴンを10万に減らすと丸い塊になります。これを避けるため、まずSelection Toolで、不要な領域や板ポリゴンに置き換えてもよさそうな地面などを選択し、Filter Selectionで削除しました。次にSimplify Toolを使用しました。Simplify Toolは、3種類の方法が用意されており、①指定のポリゴン数未満にするabsolute、②元のポリゴン数の指定パーセンテージ未満にするrelative、③absoluteとrelativeの両方法で最大値を結果にするMaximum of absolute and relativeがあります。Simplify ツールは選択範囲のみに処理することもできるので、ディテールを残したい部分を残すこともできます。はじめの生成ポリゴン数が大きい場合は、複数回に分けてSimplifyして最終的に10万ポリゴン未満にしていく方が仕上がりが綺麗でした。
また、アジアゾウ舎全体で10万ポリゴン未満にすると、どうしてもモデルが荒くなってしまうので、最終的に7分割してからポリゴンを減らしました。(もっといい切り方があると思うのですが)再構成領域の設定で7回エリアを切り出すというという分割方法をとりました。
3.モデル修正
Blender 2.8を使用しました。Blenderでは、Reality Captureでは削除しにくかった不要なポリゴンを削除し、歪曲してしまっている部分の修正などを行います。最後に.fbx形式で書き出します。
ポリゴン数の削除をBlenderで行い、その後Reality Captureに戻して再度テクスチャ生成することも可能です。注意が必要なのは、Reality Captureでは三角ポリゴンに揃える事、ファイル(.obj.rcinfo)に保持されるポリゴンIDとの整合性が取れないものはobjファイル自体が読み込みエラーになる点です。(マージや分割するとReality Captureに戻せないっぽい)
以上でフォトグラメトリによる動物舎3Dモデル制作フローの紹介は終わりです。
引続きフォトグラメトリのトライ&エラーで制作効率ノウハウを積んでいき記載していきます。
フォトグラメトリによる動物舎3Dモデル制作 was originally published in Kadinche Engineering on Medium, where people are continuing the conversation by highlighting and responding to this story.