[#Maya] SubstanceDesignerとMaya2018の連携

# はじめに
SubstanceDesignerで作成したマテリアルを、Maya(Arnold)へ移植する方法について適当に解説します。
プラグインの不具合のせいで2日ほどハマってしまいましたので、お役に立てればと思います。

- Maya 2018
- Substance Designer 2018.1.2 build 1265
- Arnold Core 5.0.1.0

# SubstanceDesignerでの設定
はじめに、新規SubstanceGraphを作成します。
今回は、Graph TemplateをPhysically Based (Metallic/Roughness)にしておきます。

適当なテクスチャを作り、BaseColor、Normal、Roughnessに接続します。
今回の例では、MetallicとHeightは使用しません。
![2018-06-16_011250.png](https://qiita-image-store.s3.amazonaws.com/0/127402/61032080-d494-8254-59b7-2462b6d3a8a7.png)

マテリアルエクスプローラ上の.sbs上で右クリック、**Publish .sbsar file**を行います。
![2018-06-16_012457.png](https://qiita-image-store.s3.amazonaws.com/0/127402/f74e6fac-c70c-4b54-bee0-b3aff93d2634.png)

これで、Substance側の設定はおしまいです。
今回作成した.sbsarファイルは[こちら](https://github.com/kodai100/SubstancePractice/blob/master/sbsar/CliffRock.sbsar)にアップしておきました。

# Mayaでの読み込み
## ※注意
**Maya2018をインストールした際に同梱されているSubstancePluginでは、.sbsar読み込みに失敗します。**
以下のサイトから最新版のビルドをダウンロードし、Mayaのインストールパスへインストールしておいてください。
[https://www.allegorithmic.com/substance-maya](https://www.allegorithmic.com/substance-maya)
一応、プラグインマネージャでSubstancePluginがロードされているか確認しておいたほうが良いでしょう。

![2018-06-16_012924.png](https://qiita-image-store.s3.amazonaws.com/0/127402/3cab085c-400b-a522-5202-f365a8914eb7.png)


## .sbsar読み込み
SubstancePluginを経由することで、Maya上に.sbsarファイルをロードすることができます。
.sbsarファイルは、Maya上で画像としてロードされるため、
Substance側のテクスチャ生成過程にどのようなノードを使用していても読み込むことができます。

はじめに、プラグインの設定を確認しておきます。
エディタモードをRenderingに変更し、Substanceメニュー > Preferencesを開きます。

![2018-06-16_015423.png](https://qiita-image-store.s3.amazonaws.com/0/127402/99ea7507-202b-19ec-13cb-3ae654338f01.png)

ここで、

- Workflow : Custom
- Automatic connections : true
- Bake format : png (お好みで)
- Output cache : Use Maya project folder

に設定しておきます。

次に、HyperShadeにて、Texture2D > Substanceノードを作成し、
![2018-06-16_020345.png](https://qiita-image-store.s3.amazonaws.com/0/127402/2e63413d-2821-bb6c-ef5e-962698c54172.png)

アトリビュートエディタで、テクスチャサイズを指定しておきます。
![2018-06-16_021513.png](https://qiita-image-store.s3.amazonaws.com/0/127402/59bf0d66-dbc7-b044-cdc9-1b15d9acb6e3.png)

次に、.sbsarファイルパスを設定し、読み込みます。

ロード後のアトリビュートには、Substanceのアウトプットノードが表示されることになりますので、
SubstanceDesignerで作成したMetallic/Roughnessマテリアルのデフォルト状態では

- BaseColor
- Normal
- Roughness
- Metallic
- Height

のプロパティがプラグイン経由でロードされることになります。
Emissiveなどを追加したい場合は、別途Outputノードを作成することで、Mayaから認識することができるようです。

![2018-06-16_020945.png](https://qiita-image-store.s3.amazonaws.com/0/127402/78c4ff5e-0c41-db2f-3130-22e72ed09d46.png)

アウトプットのリストから、アクティブにしたい出力を、有効化します。
名称の左にある再生ボタンを押下することで、有効/無効を切り替えます。
今回はbaseColor、normal、roughnessを有効にします。

![2018-06-16_021752.png](https://qiita-image-store.s3.amazonaws.com/0/127402/6e2e917a-4ea4-0430-3ca4-02f736d5dcb5.png)

Automatic connectionをtrueに設定していたことにより、自動的にネットワークが構成されます。

これら生成されたノードを、aiStandardSurfaceの適切なパラメータと接続します。

- baseColor -> Base color
- roughness -> Specular roughness
- normal -> bump2d(TangentSpaceNormals) -> NormalCamera

![2018-06-16_023346.png](https://qiita-image-store.s3.amazonaws.com/0/127402/7fb76793-e524-65ee-a5a1-96099878183d.png)

このマテリアルをオブジェクトにアタッチし、レンダリングすると以下のような結果になります。

![render.png](https://qiita-image-store.s3.amazonaws.com/0/127402/d10a4b79-d792-6b0f-f3fe-b8e594348562.png)

ちなみに、SubstanceDesigner内にあるモデルとHDR画像は、

- [path-to-substance-designer]\resources\view3d\shapes
- [path-to-substance-designer]\resources\view3d\maps

内にあります。

## 画像からの読み込み
Substance側でテクスチャごとに書き出した場合、少しばかり設定が必要になります。
最新版のMayaプラグインで.sbsarを読み込んだ際はプログラム側が勝手に処理してくれているっぽいので気にしなくてOKです。

以下のドキュメントに設定方法が記載されています。
[https://support.allegorithmic.com/documentation/display/integrations/Arnold+5+for+Maya](https://support.allegorithmic.com/documentation/display/integrations/Arnold+5+for+Maya)