チュートリアル / 読んで触ってよくわかる!Mayaを使いこなす為のAtoZ
第63回:リアリティキャプチャっぽいことをしてみよう!Maya編(2/3)

2016.05.11

  • Maya
  • ゲーム
  • チュートリアル
  • モデリング
  • 中級者
  • 学生・初心者
  • 教育
  • 映画・TV

前回は気ままに撮影した画像から、Recap360を使って3Dデータを生成しました。
このままゲームに出すにはデータが大きいので、Mayaで最適化を行いたいと思います。2つの方法を考えました。

一つは、キャプチャしたリッチな3DデータをそのままMayaでレイアウトしてシーンを作り、超ハイポリゴンのシーンを構築します。
後から低ポリゴン版の背景形状を作ってシーンまるごとベイクするという方法です。
もう一つは石や木といったそれぞれのキャプチャを、リアルタイム用のアセットとして仕上げてStingrayで配置する方法です。

まずひとつ目の方法を見てみましょう。

キャプチャデータをMayaでレイアウト

直球勝負、とりあえず全てのキャプチャを読み込み、配置します。こんな感じになります。

とりあえずハイエンドな状態で作っておけば、あとでリダクションなどに融通が効くかなと思ったのですが…。
当たり前なことに、データが大きすぎてすぐに行き詰まりました。

上図のような狭いエリアでもシーンサイズは700MB以上。ポリゴン数は500万を超えるため、オブジェクトの位置を合わせるにもデータが大きすぎて小回りが効きません。テクスチャがとにかく大きいのでシーンを開くのも大変。(一つのオブジェクトあたり4Kが2~3枚)

これではちょっとした作業をするにも待ち時間が発生してしまい、作業が全く進みません。作業はなるべく軽量に行いたいので、今回は諦めてプランBにシフトします!

それぞれのキャプチャをアセット化

Recap360は無料版の場合、データをobjで書き出せます。とりあえずMayaで開くとテクスチャ付きで表示されます。Zアップでデータが来ます。

Recap 360で生成したデータをMayaで開いた場合

Rotate X = -90で回転してYアップになるよう方向を直します。
色がなんか明るいです。マテリアルのAmbient Colorに値が入っているので0にしておきます。次の図のようになります。

ここまでは、Recap360特有のクセへの対処です。
ここからのアセット化作業としては「リダクション」と「ベイク」に大別できます。
それぞれの作業を見ていきましょう。

リダクションのコツ

とにもかくにもメッシュ量が多いので、はじめにリダクションして動作を軽量化します。ここではMayaのReduceを使います。

はじめに、メッシュが全てハードエッジになっているので、ソフトエッジに変換しておきます。こうするとReduceの時にハードエッジかどうかの判定を意識しないで済むようになります。後ほど法線マップをベイクするときにも有利です。(ハードエッジで法線マップを作るよりも、ソフトエッジで作ったほうが一般的にパフォーマンスが良くなります。)

Reduceするときのコツとしては、対象が大量のポリゴンですから、一度にポリゴンを減らすとオプションを変えるごとにリダクションの計算が入り、時間がかかってしまいます。まずはPreserve quadsを0.0にして、80%ぐらい減らします。(Recap360からくるメッシュデータは既に三角形化されているので、Preserve quadsで四角形を保つ必要はありません。ですので0.0にしておきます。)

その後、もう一度Reduceを実行します。この2回目のReduceでパラメータを微妙に変えて調整していきます。

必要に応じて飛び出しているような変なポリゴンを削除します。それほど時間をかけずいい感じなポリゴン数と形状を得られます。
あとはアセットとして使いやすくするため、オブジェクトが微妙な角度を向いていたり、ピボットの位置がいまいちなら調整をします。

今回はズボラがテーマなので、これで作業終了です:)
もっとクオリティが必要なら、Quad DrawやModeling Tool Kitを使って歪んでいる形状を直したり、ポリゴンを作りなおしたりしてキレイな形状のメッシュを作ります。

ベイクのコツ

Recap360のデータでは4Kのテクスチャが2,3枚使われていたりします。そのままのほうが高解像度なのはもちろんですが、一つのオブジェクトでその量のテクスチャを使うのは、検証としてもさすがに気が引けるので4K一枚にまとめたいと思います。

というわけでUVを編集します。0-1の範囲に収めたいだけですので、単にLayoutを実行して0-1に収めます。これでOKです。

つぎはベイクです。とりあえずTurtleでベイクしましょう。
4Kでベイクしようとすると、ブロックなノイズが出てくるので、UVを四分割して2Kを四枚作るようにベイクします。
UVを次のように分割してレンダリングします。それぞれを2Kレンダリングします。

Turtleでベイク。UVを分割してレンダリング

レンダリングしたいUVの範囲は、TurtleのRender SettingsのUV Rangeで指定できます。

レンダリングしたいUVの範囲。TurtleのRender SettingsのUV Rangeで指定

AlbedoとNormalをベイクします。ベイクされた画像をPhotoshopで一枚の4K画像にします。

Photoshopでテクスチャを作成

Mayaのコラムなのですが…必要なのでPhotoshopでのテクスチャ作成についてもご紹介します。
今回StingrayPBSマテリアルを使いますので、Roughness(表面の粗さ=光沢の広がり具合)用マップをこのAlbedoから作成します。また、バンプマップのディテール追加ようにも、Albedoの画像を再利用します。
そのために、写真に写ってしまった陰影をなくした(弱めた)マップを作ります。

Albedoマップを複製します。複製したレイヤの彩度をなくしてモノクロにします。色を反転させ、ソフトライトで元のAlbedoマップと重ねます。

この、陰影がなくなった(薄くなった)画像を複製し、彩度をなくします。これを画像Aとします。
画像Aの色を反転させてRoughnessとしておきます。(注:かなり適当です)

次に法線マップを作りましょう。既にベイクした法線マップがありますが、あれはジオメトリから抽出したデコボコ情報です。よりディテールを追加するため、テクスチャからもデコボコを取り出しましょう。
と言っても、画像AをxNormal(フリーのソフト)に持って行って法線マップにするだけです。(適当です)

xNormalで生成した法線マップをPhotoshopに持って行き、既存の法線マップの上にオーバーレイとして重ねます。強度が弱いようなら、レベル補正やカーブ補正などでコントラストを強くします。なんとなくでよいとしましょう。

マテリアルのアサイン

最後にStingray PBSシェーダーをアサインします。
Maya2016ではPlug-in ManagerでshaderFXPlugin.mllをロードすると、Stingray PBSというシェーダーが使えるようになります。これはStingrayのマテリアルと同じもので、Physical Basedのシェーダーです。なんだか気軽ではありませんか。ズボラ心をくすぐります。

メッシュにマテリアルをアサインしたら、Use ** Mapというチェックを入れて、対応するマップを接続します。今回はColor、Normal、Roughnessを使います。先ほど作ったものを接続すると、次のような見た目になります。

なんだかそれっぽくなってきました!
大体ここまでで一つのオブジェクトあたり30分程度です。一からモデルを作るのが段々面倒になってきますね:P
3DCGソフトは高度な3DCGを作成するばかりでなく、如何に簡単にするかというのも重要ですから、そう考えるとかつて無い程簡単に作れる時代になってきているのかもしれません。

まとめ

今回はRecap360で3D化したデータをゲーム用として使いやすくするために最適化しました。
かなりズボラな感じで進めていますが、それでも最終的にはコラムのトップ画像のような物が出来上がりますから侮れません。

撮影時にたまたま最高の曇り加減だったので、カラーテクスチャにオクルージョン的な情報が残っても、それ以外の不要な陰影がそもそも入らないで済んだため、今回のような適当な作業で上手く行っています。よりプロフェッショナルな見た目を実現したいなら、次のようなところをきちんと行うと良いと思います。

・各マップの作成方法。特に陰影を消すところ。
・マップの輝度を、素材に応じた適切な輝度にする。(木には木の、金属には金属のRoughness値がある。)

次回はいよいよStingrayに持って行って、シーンを組み立てていきます。

著者

築島 智之

築島 智之

オートデスク株式会社
オートデスクコンサルティング
ソフトウェアエンジニア