Unity を検索

フォトグラメトリ活用術:VR で現実世界をシミュレート

2019年8月1日 カテゴリ: Industry | 6 分 で読めます
取り上げているトピック
シェア

Is this article helpful for you?

Thank you for your feedback!

フォトグラメトリとダイナミックライティングを駆使し、バーチャルリアリティ(VR)に現実世界そのままの環境を構築した Varjo 社の Unity プロジェクト。この記事では、その舞台裏をご紹介します。

フォトグラメトリ(現実世界の物体や空間の写真をいくつも使ってデジタルアセットをオーサリングするプロセス)の応用例は多岐にわたります。今やゲーム業界以外の産業の市場においてもフォトグラメトリはその勢いを増しています。

たとえば、AEC(建築設計、エンジニアリング、建設)業界のワークフローにとって、フォトグラメトリにより作成した点群はなくてはならないものとなっています。また、自動車業界、輸送機器業界、製造業界では、構想どおりのものを確実に製作するため、実際の試作品をフォトグラメトリでキャプチャした結果とデジタル CAD モデルとの比較が行われています。

先日、これまでにない精度で現実世界の環境をシミュレートしてプロ用フォトグラメトリの可能性を示すため、Varjo 社のチームが日本最大の墓地をフォトグラメトリによりスキャンし、VR でデジタルツインを構築しました。この記事では、この野心的なプロジェクトにおける取り組みについて、同チームの方々に直接紹介していただきます。

高野山奥之院墓地シーンの制作秘話

Varjo VR-1 により初めて、上の画像のように人間の目レベルの解像度を誇る VR で、建築物や建設現場などの空間を微細な部分まで回ることが可能になりました。視力 1.0 に相当する解像度により、産業用途におけるフォトグラメトリ VR の応用の幅が広がります。

この人間の目レベルの動的解像度を持つ VR フォトグラメトリに秘められた可能性を示すべく、私たち Varjo は日本の聖地の 1 つである高野山奥之院墓地のダイナミックデモを作成しました。この記事では、この作成の舞台裏を紹介します。

フォトグラメトリ対象地の撮影

本セクションは、Varjo 社で 3D フォトグラメトリスペシャリストを務める Jani Ylinen 氏により執筆されました

フォトグラメトリの工程は、適切な撮影場所や対象物を選ぶことから始まります。すべての場所や物体が、フォトグラメトリに適しているわけではありません。今回は、デモに微細な要素を多く詰め込むだけでなく、文化的に意義のあることをしたかったので、日本の高野山にある古い墓地を撮影することにしました。屋外での撮影であったため、撮影条件のコントロールが非常にやっかいでした。しかし、だからこそやりがいがあるというものです。

今回の撮影では、次のような課題が生じました。

  1. 動き:高野山の奥之院墓地は歴史的な場所であり、広大でした。毎日驚くほど大勢の観光客が訪れていたので、三脚付きのカメラを構えると多くの注目を浴びました。しかし、フォトグラメトリを行ううえでは、撮影対象は完全に静止した状態でなければならず、周りに動き回るものがあってはいけません。また、大きなものを撮影するときには、対象そのものが動かなくても光源、つまり太陽が動いてしまうので、この制約が問題になります。撮影に数時間かかるとすれば、影も大きく変化してしまうでしょう。
  2. 天気:屋外撮影の場合には、天気は曇りでなければいけません。もちろん、撮影前や撮影中に雨が降ってしまえば話になりません。濡れた面と乾いた面では見た目が異なり、シーンは撮影期間を通じて同じ様相でなければならないのです。
  3. 地面:今回選んだ撮影場所には大小さまざまな短い松の枝が散らばっており、私たちが歩くとこれらも動いてしまったので、墓地の地面を撮影するのは非常に困難でした。

フォトグラメトリの対象の写真を撮るときの一般原則は、隣接する各写真の撮影領域を 30% 以上重ね合わせることです。撮影領域を重複させながらできる限り多様な角度で対象物を撮影することが、一番の目標になります。

高野山で撮影した領域のスキャンについては、室内をスキャンする場合と同様です。今回のシーンでは、およそ 2,500 枚の写真を撮影しました。

Unity による動的な 3D シーンの構築

本セクションは、Varjo 社でシニア 3D アーティストを務める Juhani Karlsson 氏(元 Unity VFX アーティスト)により執筆されました。 

フォトグラメトリでは現実のような没入感が得られるものの、ライティングが静的であるために実際の応用例が限られることが多いのが難点です。そこで、現実の環境をシミュレートするためにダイナミックライティングが必要でした。Unity には緻密なシーンを構築、レンダリングできる素晴らしいプラットフォームが用意されていたので、ワークフローを簡単に自動化できました。

また、出来のいい De-Lighting tool と、不足部分を補うために、Unity アセットストアを必要に応じて使用しました。ほかにも、Unity で提供されている素晴らしい Book Of The Dead アセットの木々や石も使っています。

撮影中も絶えずファイルの転送を行っていたので、三次元空間の構築にかかる時間を節約できました。まずは、Reality Capture というソフトウェアを使用して、写真の 3D シーンを作成しました。

メッシュ処理と UV

Reality Capture から、テクスチャー数が 98 x 8,000 個、ポリゴン数が 1,000 万の単一メッシュとして 3D シーンをエクスポートしました。

Houdini でこのメッシュに対してボロノイ分割を実行し、メッシュを扱いやすい小さなサイズのピースに分割しました。 その後、共有 UV を使用してさまざまな詳細度(LOD)を生成しました。 これは、異なる LOD 間でのテクスチャーのポッピングを防ぐためです。

こうして、Unity で処理可能であり、Umbra のオクルージョンカリングも適用できるサイズのテクスチャーを得ました。また、ピースを小さくすると UV の生成も軽くなりました。

そして、各テクスチャーをベイクするためのシェーダーを作成しました。Unity の De-Lighting tool を使用するには、少なくともアルベド、アンビエントオクルージョン、法線、ベント法線、位置の各マップが必要になります。ほとんどのフレームバッファーはそのままベイクできるのですが、ベント法線についてはそれほど明らかではありません。ただ、幸運なことに、ベント法線の方向は障害物に当たらないオクルージョンレイの方向と一致します。また、実質的にはベント法線を出力するだけの occlusion() という単純な VEX 関数も存在します。

ライティング除去

Unity の De-Lighting tool に付属するバッチスクリプトをテクスチャーに自動適用する Python スクリプトを作成しました。

スキャンに色の変化が多量に含まれていると、ライティングの除去処理において環境プローブを推定しづらくなります。そこで、自動的なライティング除去と、従来のイメージベースドライティングによる影の除去を組み合わせたアプローチを採用しました。

また、処理済みのモデルをインポートするために Unity アセットのポストプロセッシングスクリプトを作成しました。このスクリプトでは、マテリアルの作成とテクスチャーの割り当てを行いました。これで、4,000 個のテクスチャーのうち合計で 128 個を処理、ベイク、ライティング除去しました。

ライティングの除去前と除去後の比較

Varjo VR-1 と Unity – 簡単に統合

シーンのインポートが終われば、後は VarjoUser プレハブをシーンにドラッグするだけです。あっという間に VR-1 でシーンを視聴し、ニーズに合わせてカスタマイズできるようになりました。

Unity アセットの Enviro を使用して昼夜の変化を再現し、リアルタイムのグローバルイルミネーションをシーンにベイクしました。処理時間を短縮するため、グローバルイルミネーションには生成したメッシュ UV を使用しました。設定は、UV に関するライトマップの処理を最小限に抑えられるように調整しました。具体的には、メッシュで UV 最適化を有効にして、各種の設定を調整しました。

---

本記事は、Varjo 社の協力を得て作成されました。もっと詳しく知りたい方は、Unity におけるフォトグラメトリについて解説した記事を参照してください。Varjo 社は、Unite Copenhagen にて出展および講演を行う予定です。

 

今すぐ Unite Copenhagen に申し込む

2019年8月1日 カテゴリ: Industry | 6 分 で読めます

Is this article helpful for you?

Thank you for your feedback!

取り上げているトピック