
Maya でテクスチャマップをベイクして Unity に反映させる
Tutorial
Beginner
+10XP
40 mins
Unity Technologies

このワークフローでは、Maya を使って詳細なモデルから法線マップを作成し、それを低解像度バージョンのモデルに適用することで、詳細な外観を表現します。また、オブジェクト間の影の相互作用をエミュレートするアンビエントオクルージョン(AO)マップを生成します。
1. はじめに
このチュートリアルは、Unity 2019 LTS と Maya 2019 を使用して検証されています
Unity には、ビルトインのリアルタイムライティングが搭載されていますが、シーン内のすべてのオブジェクトにそれを使用すると、ランタイム時にかなりの処理能力を消費します。その代わりに、ベイキングと呼ばれるプロセスによって、イルミネーションをオブジェクトのテクスチャに埋め込むことができます。テクスチャにベイクされたライティングは、オブジェクトがシーン内の別の場所に移動しても変化しませんが、Unity がライティングを継続的に計算する必要がなくなり、パフォーマンスが向上します。
複雑なポリゴンで構成されたオブジェクトは、リソースを消費します。法線マップと呼ばれる画像ファイルに保存されている、オブジェクトのメッシュの細かい部分をベイクすることで、処理負荷を軽減することができます (画像 01)

このワークフローでは、Maya を使って詳細なモデルから法線マップを作成し、それを低解像度バージョンのモデルに適用することで、詳細な外観を表現します。また、オブジェクト間の影の相互作用をエミュレートするアンビエントオクルージョン(AO)マップを生成します。
2. Transfer Maps のベイクによる法線マップの作成
法線マップはさまざまな方法で作成することができますが、Maya の Transfer Map (マップの転写) プロセスでは、ハイポリのメッシュの詳細を画像ファイルにベイクして、その画像をローポリのメッシュに適用します。このプロセスで作成したファイルを保存するために、プロジェクトディレクトリを設定しておく必要があります。
1. Maya では、プロジェクトを設定または開いてから、ハイポリとローポリのメッシュを持つシーンを開くか作成します。オブジェクトのメッシュは同じ位置にある必要があり、通常はグリッドの中央に配置されます。
2. ハイポリのメッシュの詳細をローポリのメッシュに転送するには、ターゲットメッシュとなるローポリのメッシュを選択します。最も簡単な方法は、Outliner ウィンドウを使用することです。
3. メニューセットを Rendering に切り替えます。次に、メインメニューから Lighting/Shading > Transfer Maps の順に選択します (画像 02)。

4. 選択されたメッシュがターゲットとして読み込まれます。シーン内の選択されていないメッシュはソースとして読み込まれますが、ハイポリのメッシュを特に選択し、Source Meshes セクションの Add Selected ボタンをクリックすると、それを唯一のソースメッシュとして追加することができます。
5. Output Maps セクションで Normal アイコンをクリックすると、アイコンの直下に Normal Maps セクションが追加され、Normal Maps のチェックボックスが有効になります (画像 03)。

6. 法線マップ名のフィールドの横にあるフォルダーアイコンをクリックします。
7. Select ウィンドウで、ファイルを保存する場所として Maya プロジェクトの "sourceimages" ディレクトリに移動します。File name (ファイル名) フィールドに画像ファイルの名前を入力します。
8. Files of type のドロップダウンメニューで、マップの画像ファイル形式を選択します。Unity は、.tif、.png、.tga など、さまざまなフォーマットに対応しています (画像 04)。

9. Maya と Unity はともに接空間法線を使用するので、Map Space のドロップダウンメニューから Tangent Space が選択されていることを確認してください。
10. Use Maya Common Output 設定オプションをチェックすると、Common 設定セクションのプロパティが使用されます。これは、同じ設定で複数のマップを同時に作成する場合に特に便利です。
11. Connect Output Maps 下で、Connect Maps to Shader は、転送時に法線マップをオブジェクトにアタッチします。このオプションを無効にすると、マップファイルは作成されますが、ベイク後のオブジェクトには割り当てられません。
12. Connect Maps To オプションを選択して、オブジェクトに新しいマテリアルを割り当てるか、現在のマテリアルを使用して、ベイクされたファイルをシェーダーにアタッチするかを選択します。Assigned Shader オプションを選択すると、法線マップがオブジェクトの既存のマテリアルにアタッチされます。
13. Maya Common Output セクションにスクロールダウンして展開すると、ベイクされたファイルの共通設定が表示されます。
14. 生成されるマップの解像度を設定するには、マップの幅またはマップの高さを入力します。幅と高さは、256、512、1024 など、2 の累乗に相当する数値を入力してください。Keep Aspect Ratio オプションにチェックを入れると、高さと幅が同じ値に設定され、一方を変更するともう一方も変更されます。
15. ドロップダウンメニューの Transfer In から World Space を選択します。
16. Sampling Quality ドロップダウンから Medium (4x4) 設定を選択します (画像 05)。

17. Bake and Close ボタンをクリックすると、法線マップが作成され、「Transfer Maps」ウィンドウが閉じます。
転送された法線マップの画像ファイルは、「sourceimages」ディレクトリに保存されます。このマップファイルは、Unity で同じオブジェクトの Material Shader の Normal Map プロパティで使用することができます。
3. Arnold でのアンビエントオクルージョン(AO)マップの作成方法
AO マップをベイクするには、まずライティングを含む Maya シーンを用意し、ライティング情報を Unity にインポートできる画像ファイルにベイクします。この処理により、Arnold を使ってレンダリングされた AO マップファイルは、HDR(High Dynamic Range)画像ファイルフォーマットである EXR ファイルとして生成されます。このファイルを Unity の AO マップとして使用するには、画像ファイルを .tif、.png、.tga のいずれかに変換する必要がありますが、HDR ファイルはかなり大きくなるためです。
1. Render Settings を開き、Renderer を Arnold に設定します。メインウィンドウのメニューから Windows > Rendering Editors > Render Settings の順に選択します (画像 06)。

2. Render Using ドロップダウンから Arnold Renderer オプションを選択し、ウィンドウを閉じます (画像 07)。

3. メインビューポートから AO マップ用のオブジェクトを選択します。
4. オブジェクトの上で右クリックし、Marking メニューから Assign New Material を選択します。
5. Assign New Material ウィンドウで、左の Arnold セクションから Shader を選択し、aiAmbientOcclusion シェーダーをクリックしてマテリアルを作成し、メインビューポートのオブジェクトに割り当てます (画像 08)。

6. メインウィンドウのメニューから、Arnold > Utilities > Render Selection To Texture の順に選択します (画像 09)。

7. Render To Texture ウィンドウで、Output Folder テキストフィールドの右側にあるボタンをクリックし、Select Folder ウィンドウを開きます。ファイル名は選択したジオメトリの名前になります。
8. 出力マップファイルを保存するディレクトリを指定し、Select ボタンをクリックします。ウィンドウが閉じて、「Render To Texture」ウィンドウに戻ります。
9. 256、512、1024 など、2 の累乗に相当する数値を入力して、出力マップの解像度を設定します (画像 10)

10. Render ボタンをクリックすると、AO マップのベイキングが始まります。
テクスチャファイル作成の進捗状況を示す小さなウィンドウがポップアップします。このウィンドウが閉じると、AO マップが生成され、選択したディレクトリに保存されます。Unity の AO マップファイルは、同じオブジェクトの Material Shader の Occlusion プロパティで使用することができます。
4. まとめ
Unity プロジェクトのために Maya でテクスチャ情報をベイクすることで、ライティングやオブジェクトの詳細をテクスチャファイルに埋め込み、最適化を図ることができます。ベイキングは、Unity の静的なオブジェクトから高品質の影とディテールを提供しますが、リアルタイムの直接光や、動的なオブジェクトからの影を作成することはできません。ベイキングには制限がありますが、全体的なパフォーマンスを向上させる方法の一つです。ベイクされた法線マップは、ポリゴン数を低く抑えながらディテールを提供する理想的なソリューションです。