Substance Painterの使い方 (1) はじめに編

Allegorithmic社のSubstance Painterは、3Dの形状に対してテクスチャを3Dペイントとして描画していくことができるツールです。
http://www.allegorithmic.com/products/substance-painter

このツールの簡単な使い方について記載します。
なお、ここではSubstance Painter Ver.1.2.0を元に記載しています。
ここではWindowsで確認していますが、Mac版もあります。

## Substance Painterを使ったワークフロー

作業としては以下の流れになります。Substance Painterの役割は**「テクスチャを描くこと」**です。

1. モデリングツールで3D形状を作成
2. Substance Painterでテクスチャを描く *← コレ*
3. レンダリングツールやUnityなどの統合環境に、作成したテクスチャを持っていく

## Substance Painterでできること

Substance Painterの目的は、形状データを読み込み、それに対して3Dペイントでテクスチャを描くというものです。
描いたテクスチャを画像ファイルとしてエクスポートして他のツールで活用する、という流れになります。

以下のような特徴があります。

* ペイントはレイヤ単位で管理でき、非破壊型のペイントを行える
* 形状に複数のグループを与えることができる(TextureSetと呼ばれる)
* レイヤごとにマスク指定できる
* concrete/metal/rustなど、プリセットのマテリアルが豊富
* ペイント要素(Tool)を自作できる
* パーティクルを使ったブラシが特徴。汚れをつける場合に有効です
* Substance Desiginerで作成したsbsar形式をテクスチャとして割り当てできる
* プレビューがきれい (PBR + Yebisによるポストエフェクト)
* インターフェースの表記を日本語化できる！

## 使用する際に必要なデータ

3Dの形状(Mesh)データをあらかじめモデリングツールで作成しておき、Substance Painterにインポートすることで使用します。形状データはfbx/obj/x/3dsなどを使用できます。
個人的にはfbxを使うことをお勧めします。
その際に、データ内に必要な情報は以下になります。

* ジオメトリ情報
* UV情報
* 面ごとの頂点法線（なくても自動計算されますが、あったほうがいいです）

UVが存在しないと正しくペイントできません。これは、モデリングツールで重ならないようなUVを与えるようにします。
故意に重なるようにUVを割り当てる部分があってもOKです。

また、1ファイル内にジオメトリを複数用意した場合は、Substance Painterで読み込まれたときは1つにマージされるような挙動をしていました。
複数に分けて管理したい場合は、面ごとにマテリアルを与えるとそれがTextureSetとして読み込まれるようです。

では、さっそく使ってみましょう。

## 形状を用意する (モデリングツールで作成)

ここでは、Shade 3Dでモデリングしましたが、fbxを出力できるツールなら何を使っても問題ないかと思います。
ここでは3つの形状に分けており、それぞれの面ごとに part1/part2/screwというマテリアル（Shade 3Dではマスターサーフェス）を割り当てました。
![sp_img00_20150206.png](https://qiita-image-store.s3.amazonaws.com/0/62860/d55f860e-a9dc-8ab8-7049-7bec566eb5b6.png)
このシーンをfbxでエクスポートします。

### Shade 3D ver.14.1.3/ver.15.0までの注意点

以下、Shade 3D ver.14.1.3/ver.15.0での情報です。
Shade 3Dの場合は、ポリゴンメッシュの各面のフェイスグループとしてマスターサーフェスを指定します。
ポリゴンメッシュ自身の表面材質指定は行わないようにし、
マスターサーフェスのマッピングレイヤでテクスチャを「指定しない」とします。
これをFBXエクスポートすると、Substance PainterでMeshを読み込んだ際に
TextureSetsにShade 3Dでのマスターサーフェスが並ぶようです。
表面材質のマッピングレイヤにテクスチャを指定すると、なぜかうまくいきませんでした。

※ Shade 3D ver.15.1以降では修正されているようです。

以降は、Substance Painterの処理になります。

## 新しいプロジェクトを作成

メインメニューの「File」-「New」を選択。
New Projectダイアログボックスで「Select」ボタンを押してペイント対象のfbxファイルを指定します。
![sp_img01_20150206.png](https://qiita-image-store.s3.amazonaws.com/0/62860/f4c41312-30af-2f20-a638-f0a08c2dab26.png)
OKボタンを押すと、以下のように表示されました。
![sp_img02_20150206.jpg](https://qiita-image-store.s3.amazonaws.com/0/62860/78f10ee4-f053-93df-ac18-b2fcd984ce25.jpeg)

一番真ん中の左が3Dでのビュー領域、右がUV空間でのビュー領域です。

## 画面説明

よくいじると思われる部分だけかいつまんで説明していきます。
はじめは、TextureSetsでペイント対象のTextureSetを選択し、Layersでレイヤを用意。
ShelfでBrushとMaterialを選択して3Dビューでペイントしていく、とするのが分かりやすいかと思います。

### Viewer Settings

ビュー領域の表示全体の設定を行います。

![sp_img04_20150206.png](https://qiita-image-store.s3.amazonaws.com/0/62860/8b2b008f-dd23-a379-8079-d78b40dca118.png)

「Mode」で「Material」を選択している場合は、すべての要素が反映されます。
「Solo」を選択すると、生のテクスチャ画像だけが反映されます。テクスチャ自身に何がペイントされているか確認する場合は「Solo」を選択するとよいでしょう。
「Environment Map」で、3Dビューに表示される背景を切り替えます。背景はhdr画像(hdrまたはexrファイル)になっており、これによって全体の光が調整されます。すべての照明はこの背景により行われます。
「Environment Opacity」で、背景の反映度合いを0-100で指定します。
「Environment Exposure(EV)」で、全体の露出値を指定します。これが大きくなると明るくなり、小さくなると暗くなります。

### TextureSets

モデリング時に用意したマテリアル一覧に相当するものが列挙されます。
これを切り替えて、マテリアルごとにペイントを行うことになります。

![sp_img03_20150206.png](https://qiita-image-store.s3.amazonaws.com/0/62860/83c62472-58a9-625b-8fb0-495c7018213f.png)

また、左の二重マル部分をクリックすると、割り当てられている個々の面の非表示/表示を切り替えます。

### Shelf

ペイントのためのペンの要素が一覧されています。

![sp_img05_20150206.jpg](https://qiita-image-store.s3.amazonaws.com/0/62860/21087e10-4471-1d28-c202-5a2269fb3cc1.jpeg)

ペイントで使う素材をMaterialとして選択し、BrushかParticleのどちらかで塗る、となります。
MaterialとBrushをあわせたものをToolとして、ユーザーが新たに登録していくことも可能です。

### Layers

各TextureSetごとのペイントをレイヤとして重ねていきます。
レイヤの上のものほど、上に重ねていくように描画されます。

![sp_img06_20150206.png](https://qiita-image-store.s3.amazonaws.com/0/62860/b57a2c45-7f77-efbc-6efa-ac2f5374ad39.png)

それぞれの影響を0-100の数値で調整でき、表示/非表示、順番の入れ替え、などが可能です。
マスクもレイヤ単位で行えます。

### Tool

現在の描画情報が表示されます。

![sp_img07_20150206.png](https://qiita-image-store.s3.amazonaws.com/0/62860/16cac73e-0249-8659-64b3-2f9dffbfa07f.png)

ペンのBrushやMaterial、それぞれのパラメータを調整できます。
Particleとしてペイントする場合は、Physicsパラメータで調整できます。

## Material要素

描画のためのMaterialは、
color/height/roughness/metallicの4つに大きく分かれます。
また、最終的に生成されるテクスチャもこの4種類が出力されます。

### Color

3DCGではDiffuseに相当する色です。RGBで指定します。
また、Fill Layerではテクスチャを与えることができます。

![sp_img08_20150206.jpg](https://qiita-image-store.s3.amazonaws.com/0/62860/ea164ddd-1e7a-3bc7-643b-a6401278427a.jpeg)

### Height

高さを指定します。これは、全体に凸凹をつけるために使用されます。
Fill Layerで単一なHeightで全体を塗りつぶしても凸凹は変わりません。
相対的に隣のピクセルでのHeightが異なることで、凸凹が認識できます。

![sp_img09_20150206.jpg](https://qiita-image-store.s3.amazonaws.com/0/62860/2c8dd559-8800-fcca-443f-e06de48afaee.jpeg)

生成された高さマップから、最終的にXYZの向きを表す法線マップ（Normal Map）に変換して出力したのを、多くの3Dツールが利用することになります。

### Roughness

荒さを指定します。
この値が大きくなるとざらつきが出たような鈍い反射になります。0にすると、鏡のような全反射になります。

![sp_img10_20150206.jpg](https://qiita-image-store.s3.amazonaws.com/0/62860/31258952-8a9c-cdef-3ba3-53874f02e6d3.jpeg)

### Metallic

反射を指定します。Roughnessと組み合わせて表現する場合が多いかと思います。
Roughnessが小さい値の場合は、Metallicが0.0でも反射が存在する点に注意してください。
Roughness 0.0（荒さなし）＋Metallic 1.0で鏡のような全反射になります。

![sp_img08_20150206.jpg](https://qiita-image-store.s3.amazonaws.com/0/62860/ddaf61a7-1273-b0e2-1871-a1b7cfce6d3f.jpeg)

## Layer要素

TextureSetの選択ごとに、レイヤを複数枚重ねることができます。

![sp_img11_20150206.jpg](https://qiita-image-store.s3.amazonaws.com/0/62860/f9402432-81cd-45de-1fc6-c724a9555c8a.jpeg)

Layersビューの左上のリストで、Base Color/Height/Roughness/Metallicを切り替えることができ、それぞれに影響度を右の数値部をクリックして変更できます。
全体的に薄くしたい場合は、Base Color/Height/Roughness/Metallicそれぞれの数値を調整する必要があります。
また、1レイヤをすべて無効/有効にしたい場合はレイヤの左の二重マルのところをクリックします。
「+」でレイヤを新規追加、「-」で選択レイヤを削除します。
塗りつぶしのようなアイコンを選択すると「Fill Layer」を追加します。
このレイヤはペイント対象ではなく、全体のマテリアルを変更したり、用意したテクスチャを割り当てるのに利用します。
とりあえずの基本としては、これだけおさえておけばOKかと思います。

## ビューでの操作

3Dビュー、2Dビューの操作は以下のように行うことができます（この他にも機能があります）。

### マウス操作（ペンタブレットでもOK）
| 操作 | キープッシュ | 動き |
|:-----------|:------------|:------------|
| マウス左ドラッグ  |---|ペイント|
| マウスホイール    |---|ズームイン/ズームアウト|
| マウス右クリック  |---|ポップアップメニューを出す|
| マウス左ドラッグ  |Alt|カメラの注視点を中心に回転|
| マウス右ドラッグ  |Alt|ズームイン/ズームアウト|
| マウス左ドラッグ  |Ctrl + Alt|カメラのパン|
| マウス左ドラッグ  |Shift|背景の回転|

### キー操作

CtrlやAlt、Shiftを長押しすると、ビュー部の左下にキーボード押し操作の一覧が表示されます。
キー操作については、メインメニューの「Edit」-「Settings」でShortcutsを選択すると、一覧/変更可能です。

| キープッシュ | 動き |
|:-----------|:------------|
|F|形状が中央にフィットするようにカメラ位置を調整|
|P|マウスクリックした位置のMaterialを取得|
|1|ペイントツールに切り替え|
|2|削除ツールに切り替え|