MODOからUnreal Engineへのワークフロー<前編>


https://www.youtube.com/watch?v=0bcUr0priaw

このビデオではThe Foundry社からリリースされている「Making Game Assets」を元に、MODO 10からUnreal Engineへとデータを出力するワークフローをご紹介します。

サンプルとなるこのシーンには、質感設定まで行われた高解像度のハイポリメッシュと、その情報の転写先となる低解像度のローポリメッシュが用意されています。Unreal Engineにはこのハイポリの情報が転写されたローポリのメッシュを持って行くため、これから高解像度の情報を画像にベイクする処理を行います。

ハイポリとローポリ、それぞれに対応するメッシュが用意されており、その数分ベイク処理を行う必要があります。従来はひとつずつベイク処理を行っていましたが、MODO 10シリーズでは複数のベイク処理をスムーズに行えるようにするためのベイクウィザード機能が搭載されていますので、ベイクウィザード機能を利用してベイク処理を行っていきます。

ただしベイク処理を行う前に、いくつか前処理を行っておきます。

ベイクを行う際、メッシュが重なり合っている箇所は、適切にベイクできないことがありますので、あらかじめ重なり合いを解消するようにしておきます。元の形状を保っておくため、モーフマップでバックアップを作っておきましょう。

ハイポリとローポリ、二つのメッシュを選択してからモーフを絶対モーフで作ります。モーフの名称はBasePositionとしておきましょう。では移動させたいポリゴンを選択したら、アクションセンターをエレメントにして法線方向に移動させます。

次にUnreal Engine用に、モデルからタンジェントベースを適用する必要があります。頂点マップサブタブを開くと接線ベクトルを割り当てというポップアップがあります。ここにはメジャーなゲームエンジンでサポートされているタンジェントベースがいくつか用意されています。Unreal EngineではMikkタンジェントベースを使いますので、Mikk接基底を作成でタンジェントベースを作ります。

タンジェントベースを作ると、頂点マップリストのその他のところにBakeTextureというマップができているのが確認できます。このタンジェントベースはシェーディングの結果が正しくなるように、ノーマルベイクと連動しています。全てのローポリを選択し、Mikkタンジェントベースを作ります。対応しているUVの名称となるため、すべてBakeTextureとなります。

モデルのトポロジに変更を行った場合には、もう一度このMikkタンジェントベースは作り直すようにしてください。

ではいよいよベイクウィザードを起動します。ベイクウィザードではいくつかオプションがありますが、手動で設定するよりも遥かに簡単に設定できます。まずはBodyArmerで設定していきます。まずはベースファイル名称を指定し、テクスチャを保存するフォルダを指定します。あらかじめベイクテクスチャ用のフォルダを作っておきましょう。

BodyArmerは前面に出てくる箇所なので、4Kの解像度で作りましょう。高解像度のものをスケールダウンするのは簡単なことだからです。

UVを指定し、距離を8mmに指定します。ターゲットマテリアルはベイクした画像が設定されるマテリアルグループを指定します。ここではBake_Armerを指定します。一番下にベイクに関する3つのオプションが用意されていますが、ここではオフにしておきましょう。

次のステップへと進んだら、ソースとターゲットを指定します。ソースにハイポリのメッシュを、ターゲットにローポリのメッシュを指定します。

次のステップは出力ですが、今回は必要ないので飛ばしましょう。

その次のステップでは、質感を定義するためにベイクしたいエフェクトを定義します。ベイクされるエフェクトは、必ず対応するエフェクトからのみしか情報を取得できないようになっています。つまり、ディフューズの色からはディフューズの色しかベイクすることはできず、ディフューズの色からルミナンス量をベイクすることはできません。このため、MODOで普通にマテリアルをつめて質感を設定してきた場合、まずは対応するシェーダツリーのエフェクトへとベイクし、Unreal Shaderのエフェクトとしてはベイクしません。MODOのエフェクトとしてベイクしたテクスチャを、Unreal Shaderで使えるように後から修正を施します。

ここではディフューズ色/スペキュラ量/ラフネス/Unreal Normal/アンビエントオクルージョンをベイクします。Unreal Normalに関しては、緑を反転とピクセルごとに従接線をオンにします。この二つのオプションはUnreal Engine用に必要なオプションです。

これでベイクに関するオプション設定が完了です。ベイクのみを選択すると、すぐにベイク処理が始まりますが、今回は複数のアイテムに対して一括でベイクしたいので、ベイクアイテムを作成します。

シェーダツリーを見てみると、マテリアルグループBake_Armerの中に4つの画像が登録されているのが確認できます。normalUEを見てみると緑を反転オプションがオフになっています。テクスチャロケータタイプの接線タイプをdPdu Cross Produtになっています。Unreal Engineの場合には、この接戦タイプにしておく必要があります。

シェーダツリーでBake Itemsを見てみると、ベイク用のベイクアイテムが生成されています。またAmbient Occlusion用のOutputもあります。Texture Bakingに関してはわかりやすいように、TextureBakingの前にArmer_をつけておきます。Ambient Occlusion用のOutputに対しても同様にグループ名称を変えArmor_Bake Wizardにしておきます。編集色も変えておきましょう。

これと同じプロセスを、他のアイテムに対しても行っていきます。その都度、Base Filenameは適切な名称へと変えてください。表に出る範囲がそれほど広くなければ、解像度の幅と高さは少し低めにしても構いません。ベイクするアイテムに応じて、ターゲットとなるマテリアルグループを変えます。

次のステップでソースとターゲットを変更します。後は全て同じ設定でベイクアイテムを作成します。シェーダツリーで確認したら、先ほどと同じようにリネームを行い編集色を変えておきます。この手順をベイクしたい全てのアイテムに対して行います。ベイクアイテムは9つあります。

実際にベイクを行う前に、ベイクするUnreal Engine用のノーマルマップのカラーマップを調整しておく必要があります。マテリアルグループからnormalUEを選択し、静止画像タブのカラースペースでデフォルトになっていたら、これを(なし)に変更しておいてください。シェーダツリーの検索でnormalUEを全て表示選択してから、一括で変更すると良いでしょう。

ベイクは選択したアイテムだけでも可能ですし、全てのアイテムを同時にベイクすることもできます。

ベイクした後、画像タブを見てみると画像がベイクされ、フォルダの中に入っているのが確認できます。一つのベイクアイテムに対して5枚の画像が作成されますので、9つのベイクアイテムが有るため45枚の画像が生成されました。

では画像を確認していきます。ハイポリのメッシュは非表示にしておきましょう。

よく見てみると腰のポーチに少し問題があるようです。ブーツのところのラインもおかしな状態になっています。これは画像の解像度が低すぎたためです。ブーツのnormalUEを選択し、解像度を上げておきます。テクスチャメニュー > 画像処理 > 解像度の設定から解像度を変更します。また距離の値を8mmから15mmへと変えておきます。膝のところも8mmから12mmへと変更します。

画像を見てみると、ボディスーツのRoughnessにラインが出てしまっています。オリジナルのハイポリのメッシュの質感をシェーダツリーで確認してみると、Roughnessのグラディエントが入射になっています。入射になっているとビューに依存してしまうため、ラインが出てしまう原因となります。このためこのグラディエントはオフにして、ベイクし直しましょう。修正が必要な膝とベルト、スーツとブーツを選択して、選択をベイクで選択しているベイクアイテムだけをベイクし直します。

ベイクが終了したら、ファイルメニュー > 全ての画像を保存で画像を全て保存しておきます。

画像を保存したら、アドバンスとビューポートに切り替えます。バックアップを取っておいたモーフマップでメッシュ形状を元に戻しましょう。より正確に確認するために環境を設定する必要があります。シェーダツリーのEnvironmentを見てみると、二つの環境が用意されており、オリジナルのシーンではレイヤー化されています。下側にあるEnvironmentのHDR画像を上の方へと移動します。

このEnvironmentを反映するために、ビューポートを設定します。アドバンストビューポートでライティングシーン+環境とし、背景もそれに合わせます。反映には少し時間がかかるかもしれませんが、ローポリの解像度でもハイポリのようにリアルに見え、リアルタイムに確認することができます。