Substance Painterの使い方 (4) テクスチャのエクスポート編

Substance Painterは、ペイント後のBase Color/Height/Roughness/Metallic要素をテクスチャに落とし込むのが最終目的になります。
このとき、Unity向けやUnreal Engine向けに別途コンバートするオプションが用意されています。

Ver.1.2.0以降では、新しくエクスポート時のPresetを作成できるようになりました。
ここでは、Unity向けのテクスチャ出力と、Shade 3D向けのテクスチャ出力を行ってみることにします。

Substance Painter上では以下のようにペイントしており、part1/part2/screwの3つのTextureSetを使っているとします。
![sp_img40_20150207.jpg](https://qiita-image-store.s3.amazonaws.com/0/62860/b02adc3b-9adc-880c-bd42-e03607c96135.jpeg)

## Unity向けにテクスチャをエクスポート

メインメニューの「File」-「Export all channels」を選択すると「Export document」ダイアログボックスが表示されます。
ここの「Configuretion」タブを選択すると、あらかじめ用意されているエクスポート時のプリセットが一覧されます。
ここで「Unity 4」を選択。

### Presetの確認

![sp_img41_20150207.png](https://qiita-image-store.s3.amazonaws.com/0/62860/ce1ba496-15eb-2f68-3e39-e46903ecb7e3.png)

Output mapsに、

\$mesh_\$textureSet_DiffuseGlossiness
\$mesh_\$textureSet_Normal
\$mesh_\$textureSet_DiffuseIllumination

の3つが列挙されています。
![sp_img42_20150207.png](https://qiita-image-store.s3.amazonaws.com/0/62860/bd96b3fe-ba7d-48fc-bf33-377e523f1da4.png)

「\$mesh」はメッシュ名（というかファイル名）、「\$textureSet」はTextureSet名、に置き換えられます。

DiffuseGlossinessは、Unity4 Diffuse(RGB) + Glossiness(A)。
Normalは、Normal OpenGL(RGB)。
DiffuseIlluminationは、Unity4 Diffuse(RGB) + Emissive(A)。

となっています。これについては、右のInput mapsまたはConverted mapsから要素をドラッグして割り当てることで変更可能です。
Input mapsまたはConverted maps上の色が、それぞれの割り当てに対応しています。
なお、この色は固定というわけではなく、Substance Painterを立ち上げると変更される場合が多いです。割り当て自身は一度指定すると変更されませんが。

### Exportを行う

Exportタブに戻って、出力する情報を指定します。
一番上のパスは出力先フォルダ（クリックすると変更できます）、
ConfigでPresetを選択（ここではUnity 4を選択）、
Texture setsでエクスポートするテクスチャセットと出力サイズを指定します。

![sp_img43_20150207.png](https://qiita-image-store.s3.amazonaws.com/0/62860/9bbd7b36-8e80-a4c3-fb0d-cc7337b8a932.png)

Exportボタンを押すと、しばらくするとエクスポート完了のメッセージボックスが表示されます。

## Unityでテクスチャを割り当て

Unity 4.6.1で確認しています。
元となる形状のfbxをインポートし、その後、Substance Painterで作成したテクスチャをインポートしました。
法線マップのテクスチャについては、読み込み後にTexture Typeを「Normal map」とし、Create from grayscaleをOffにしてApplyボタンを押して法線マップとして保持するようにしておきます。

シーンにPlaneとDirectional Lightを配置し、ペイントしたMeshを配置。

MaterialのShaderとして「Bumped Specular」を指定しました。
このShaderではテクスチャとして「Base (RGB) Gloss(A)」と「Normalmap」の2枚を指定できます。
![sp_img44_20150207.png](https://qiita-image-store.s3.amazonaws.com/0/62860/a609ae24-4526-638e-e41f-88706c4700f0.png)
このテクスチャとして、「mesh名\_TextureSet名\_DiffuseGlossiness.png」「mesh名\_TextureSet名\_Normal.png」を割り当てています。

これにより、以下のように表示されました。
![sp_img45_20150207.jpg](https://qiita-image-store.s3.amazonaws.com/0/62860/cdce34f5-0e96-ec4a-409b-a5297e571581.jpeg)

## Shade 3D向けにテクスチャをエクスポート

次に、Shade 3D向けにSubstance Painterで作成したテクスチャをエクスポートしてみます。

メインメニューの「File」-「Export all channels」を選択し、「Export document」ダイアログボックスの「Configuretion」タブを選択。

ここで、Presetsの「+」ボタンを押すと新しいプリセットを追加できます。
「Shade 3D」というプリセット名にしました。

Output mapsの上のCreateの「RGB」で拡散反射(Diffuse)用テクスチャと法線(Normal)用テクスチャ、「Gray」で荒さ(Roughness)用テクスチャと反射(Reflection)用テクスチャを出力するとしました。

![sp_img46_20150207.png](https://qiita-image-store.s3.amazonaws.com/0/62860/ed5e28bc-6040-ad44-8327-0bf5314a46a2.png)

|出力名|タイプ|割り当て|
|----:|----:|----:|
|\$mesh_\$textureSet\_Diffuse|RGB|Unity4 Diffuse|
|\$mesh_\$textureSet\_Normal|RGB|Normal OpenGL|
|\$mesh_\$textureSet\_Roughness|Gray|Roughness|
|\$mesh_\$textureSet\_Reflection|Gray|Specular|

と指定。
Export時のConfigで作成した「Shade 3D」を指定し、テクスチャをエクスポートします。
1マテリアルに対して4枚のテクスチャを使うことにします。

## Shade 3Dでテクスチャを割り当て

ここでは、Shade 3D ver.15を使用しました。
「荒さ」表現がありますので、Shade 3Dでレンダリングする場合は「パストレーシング」で行う必要があります。

### テクスチャの読み込み

Substance Painterで作成したテクスチャ「Diffuse」「Normal」「Roughness」「Reflection」を読み込み。

Diffuseテクスチャについては、テクスチャのガンマを(1.0 / 2.2)にしておきます。

### 表面材質の指定

表面材質の基本設定と効果設定を以下のように指定。

|要素名|値|
|----:|----:|
|拡散反射|1.0|
|光沢1|0.0|
|反射|1.0|
|荒さ|1.5|
|フレネル|0.68|

![sp_img47_20150207.png](https://qiita-image-store.s3.amazonaws.com/0/62860/53fc4b6e-2879-b06a-c225-c1b8779bd19d.png)

表面材質のマッピングレイヤで、以下のように重ね合わせました。

![sp_img48_20150207.png](https://qiita-image-store.s3.amazonaws.com/0/62860/e4932ec1-93f8-2895-79a7-9ea8be54be3d.png)

|マッピング|割り当てテクスチャ|合成|色反転|
|----:|----:|----:|----:|
|拡散反射|Diffuse|-|-|
|拡散反射|Reflection|乗算|○|
|法線|Normal|-|-|
|反射|Reflection|-|-|
|反射|Roughness|乗算|○|
|荒さ|Roughness|-|○|
|荒さ|Reflection|加算|○|

※ あくまでも似せてるだけなので、もっといい組み合わせのアイデアありましたらご指摘いただければ幸いです。

## レンダリング

パストレーシングでレンダリングします。
この際に以下の点に注意します。

* 光源は背景のIBLのみ。無限遠光源の明るさと環境光は0にします。
* レンダリング時はパストレーシングを選択し、「拡散反射カットオフ」を0にする
* 色補正のガンマを2.2にする

こんな感じになりました。

![sp_img49_20150207.jpg](https://qiita-image-store.s3.amazonaws.com/0/62860/c58d538c-b6b8-cc63-e2dd-1f9b1c773153.jpeg)