December 3, 2015

「フォトグラメトリー アセットの作成方法」パート2

作成 Min Oh

「フォトグラメトリー アセットの作成方法」のチュートリアル パート 2 にようこそ!この記事では、写真の再構築プロセスの一般的なワークフローについて説明します。Agisoft PhotoScan を使用し、テクスチャのライティングを除去 (打ち消し) するプロセスを、私自身がオープン ワールドの Kite デモを制作しながら習得したコツと合わせてご紹介します。

準備

Agisoft PhotoScan で 3D モデルとテクスチャを生成するプロセスを開始する前に、写真を選別します。処理対象の写真を選ぶ際に検討すべきことがいくつかあります。写真は十分に鮮明である必要があります。写真がぼやけていると、ぼやけたテクスチャで形が崩れた 3D メッシュになります。また、写真が物体のすべてのアングルをカバーするようにしますが、オーバーラップしすぎないようにします。写真の数が多いからといって、結果がよくなるわけではありません。できる限り少ない数の写真から始めて、穴があるエリアがあれば写真を追加します。 写真をひとつひとつ時間をかけて検討し、必要なものを選んでください。写真の選別に費やした時間が結局は時間の節約につながります。3D モデルの実際の処理が速くなり、より良い結果が生まれるからです。 

システムと Agisoft PhotoScan の設定

Agisoft PhotoScan は、CPU、 GPU、メモリといったハードウェアの仕様に非常に依存します。迅速に処理するには、ある程度のレベルのマシンのセットアップが必要です。十分な性能を備えたグラフィック カード (NVIDIA GeForce 8xx シリーズ以上) があれば、GPU で OpenCL アクセラレーションをセットアップし、写真再構築をまとめて行うことができます。これにより、処理時間に大きな違いが生まれます。 

他にも利用可能なフォトグラメトリ ソフトウェアがあります。ご自身のプロジェクトにどれが最適であるか、他のプログラムもご自由に試してみてください。
https://en.wikipedia.org/wiki/Comparison_of_photogrammetry_software

フォトスキャン再構築の一般的なワークフロー

1.写真のアライメント

最初のステップとして、写真のアライメントを行います。「写真のアライメント」ステップでは、基本的に写真の位置と方向を決めます。このステップは、写真再構築のプロセス全体から見ると、比較的速く終わります。「画質の推定 (estimate picture quality)」を実行し、写真の品質の値をチェックすることができます。品質が 0.5 よりも低ければ、こうした写真を無効にすることをお勧めします。

青い四角形は、カメラの位置と方向を表しています。

2.高密度ポイント クラウドの構築

次に、「高密度ポイント クラウドの構築 (building dense point cloud) 」プロセスを実行します。このプロセスでは、3D 座標の X、Y、Z のデータポイント一式が得られます。最初に「最低」品質の高密度ポイント クラウドを実行すると、時間を節約し、効率が高くなることがわかりました。高密度ポイント クラウドの最低の設定によって、何が処理されるかがわかるようになります。そこから、ポイント クラウドの望ましくないセクションを削除することができます。処理時間を短縮するだけでなく、高ポリゴンの必要なセクションにプロセスを集中させることができます。高密度ポイントクラウドの初回分をクリーンアップしたら、それを再度処理して望ましくより高い品質にします。超高品質 (ultra high) 設定が必ずしも最高の結果にはなりません。ディテールが適切になる代わりに、多くのノイズが生じる可能性があります。こうした設定は、他の設定に比べて処理時間もはるかに長くなります。高密度クラウド ポイントの段階では、ほとんどの場合「高品質 (high)」設定を使用します。

3.メッシュをビルド

高密度ポイントクラウドで満足のいく状態になったら、メッシュをビルドします。2 つのサーフェス タイプから選ぶことができます。岩や木などの閉じたオブジェクトには、「任意のサーフェス タイプ (arbitrary surface type)」 を使うようにします。「高さフィールドのサーフェスタイプ (height field surface type)」は、テレインなどの平面のモデリングに使用します。

必要に応じてポリゴンフェース カウントを調整できます。コンピュータやソフトウェアが、お選びになったポリゴンフェース カウントを扱うことができるかを考える必要があるかもしれません。エピックが GDC Kite デモを制作していた 2015 年の早期には、ZBrush には 32 ビット バージョンしかなく、1500 万ポリゴンを超えるものをエクスポートするのは大変でした。現在、ZBrush には 64 ビット バージョンがあるので助かります。

4.モデル テクスチャのビルド

テクスチャのビルドも比較的短時間で終わるプロセスです。テクスチャのサイズをすべてのディテールをキャプチャするのに十分な大きさになるようにするだけです。目安としては、テクスチャ サイズをできる限り大きくして、後でサイズ調整します。 

フォトスキャンの性質上、UV は効率が悪く、クリーンアップ プロセス中にかなりの量のデータを失うことになります。

5.保存 / エクスポート

モデルとテクスチャをエクスポートする用意が整いました。必要な最終結果のファイル タイプを確認してください。モデルに対して FBX または OBJ がうまく機能します。テクスチャのライティングを適切に除去できるようにするには、カラー情報をより多く持つ 16-bit Tiff を選択してください。

ライティングの除去

UE4 の PBR レンダラーを最大限活用するには、処理されたテクスチャからライティング情報をできる限り抽出します。そうしないと、アセットにライティングとシャドウが焼き込まれてしまい、アセットをシーンに配置したときに見た目が適切になりません。テクスチャのライティングを除去するにはいくつかの方法があります。ひとつめの方法としては、ハイダイナミックレンジ/グレイ ボール/ クロム (ミラー) ボール (HDR/Grey-Chrome) の情報を使って 3D 空間でライティングを再現するものがあります。もうひとつは、単に Photoshop を使う方法です。

HDR/グレイ ボール、クロム ボールを使用する方法

HDR/グレイ ボール、クロム ボールのセットアップを使う基本的な考え方は、3D プログラムで同じライティング シナリオを再現するというものです。HDR 画像を使用して、まずシーンをライティングします。ライティングの強弱 (Intensity) をグレイ ボールを使用して合わせ、回転をミラー ボールを使用して合わせます。ターゲット オブジェクト (この場合は岩) は、ライティングを正確にするために正しい実物大スケーリングでなければなりません。事前に計画し、オブジェクトを測定します。またはオブジェクトのサイズを参照できるような写真を撮影します。私たちはサイズ参照のためにグレイ ボール、クロムボールの装備を使用しました。ターゲット オブジェクトは、ライト情報を適切にベイクするように、グレイ部分を 20% (グレイ ボールのグレイ値 18% におおよそ一致し、中間グレイ値とも言われます) 持つようにします。

3D プログラムのライティング シナリオを再現したら、次にメッシュのライティング情報をシーンでベイクします。ベイクされたライティング情報マップは、オリジナルのテクスチャと合成されて、ライティングを除去したテクスチャを作成します。合成操作は、以下のようになります。 

オリジナル テクスチャ/ (ベイクしたライティング情報 *5) = ライティングを除去したテクスチャ

こうした手順に従うと、ライティングの除去は多くの手動のクリーンアップを加えることなく行うことができます。

HDR/グレイボール、クロムボールを持っていない場合

HDR/グレイボール、クロムボールなどの適切なフォト キャプチャー情報を持っていない場合にテクスチャのライティングを除去する使用可能な他の方法としては、Photoshop でハイパスフィルタを使用するというやり方があります。 

オリジナルの写真を別のレイヤーに複製して、必要な半径設定でハイパスフィルタを適用するだけです。このフィルタは、オリジナルのテクスチャからコントラストの強い写真を作ることができます。ハイパス フィルタを適用後、オリジナルの写真にブレンドして戻すことができます。ブレンド モードとオパシティは、写真によって様々です。ハイパス フィルタ設定とブレンド モードで様々な半径を試してみて最高の結果を得てください。

次回の投稿予定

コミュニティの多くの方々がこのフォトグラメトリーのシリーズに関心を寄せてくださり嬉しく思います。このチュートリアルは、私が Kite デモ制作中に気づいたコツと合わせて、写真再構築プロセスの非常に一般的なプロセスを紹介するものです。こうしたコツが、皆さんの時間節約につながればと思います。

次回の投稿では、ライティングを除去したテクスチャを持つ高ポリゴンのフォトスキャン モデルからゲームで使えるアセットを作る方法について説明します。次回の投稿をお楽しみに!