【Substance Painter】Substance Painterサクッと入門 - 基本的なペイント操作~Unityに取り込むまで

Substance Painterに入門してみます。
この記事では基本操作、ペイントの基礎からUnityに取り込むまでをまとめます。

Substance Painter 2019.2.3

Substance Painter?

Substance PainterはUnityなどのゲームエンジンに対応している3Dペイントツールです。
3Dペイントツールを使うとマテリアルにアサインする各テクスチャが作りやすくなります。

例えば、UnityのStandard Shaderはアルベドをはじめとして、
MetallicやSoothness、Normal、Heightなどの情報をテクスチャとして与える必要があります。

f:id:halya_11:20191110174021p:plain

これらを一個一個手で描いていては大変な労力になってしまいます。
そこで絵を描くような感覚でマテリアルを作成し、結果としてこれらのテクスチャが書き出されるようにしたツールが3Dペイントツールです。

プロジェクトを作成する

それではSubstance Painterでプロジェクトを作成してみます。
まず、ファイル > 新規から新規ファイル作成ウィンドウを開き、以下の操作を行います。

  • Templateで対応するゲームエンジン名を選択(UnityのStandardShaderを使う場合はUnity5)
  • Fileからテクスチャを作りたいFBXファイルを選択(UV展開まではされている必要アリ)
  • 法線マップがある場合には法線マップをインポートしておく
  • OKをクリック

f:id:halya_11:20191110175805p:plain

ちなみにドキュメント解像度は書き出し時の解像度ではないので十分な大きさを設定しておけばOKです。
下図のようにモデルとテクスチャが表示されれば作成完了です。

f:id:halya_11:20191110180217p:plain

基本操作

次に必要最低限の基本操作だけは覚えておく必要があります。
まずペイントは普通に左ドラッグです。

f:id:halya_11:20191110180659g:plain

回転はAlt + 左ドラッグです。

f:id:halya_11:20191110180821g:plain

移動はAlt + 中(ホイール)ドラッグです。

f:id:halya_11:20191110181005g:plain

拡縮はホイールの回転で制御します。

f:id:halya_11:20191110180928g:plain

また、Shiftを押しながら右ドラッグでライト(環境マップ)を回転できます。

f:id:halya_11:20191110185527g:plain

ブラシで塗る

それではこのモデルをブラシで塗っていきます。
まず、レイヤーウィンドウから新しくレイヤーを作ります。

f:id:halya_11:20191110185812p:plain

あとはマテリアルを選択 > 左ドラッグで塗っていきます。

f:id:halya_11:20191110190147g:plain

色などはPropertiesウィンドウのParametersから調整できます。

f:id:halya_11:20191110190337p:plain

塗りつぶす

次に塗りつぶしをしていきます。
まず画面下部のマテリアルから好きなものを選択して、モデルの上にドラッグ&ドロップします。

f:id:halya_11:20191110181846g:plain

すると塗りつぶし用のレイヤーが追加されてモデル全体がこのマテリアルでペイントされます。

f:id:halya_11:20191110181951p:plain

色などはブラシと同様PropertiesウィンドウのParametersから調整できます。

f:id:halya_11:20191110182814p:plain

マスクを掛ける

この状態でさらに別のマテリアルをドラッグ&ドロップすると塗りつぶしレイヤーが追加されます。

f:id:halya_11:20191110183057g:plain

次に、ここにマスクを掛けます。
レイヤーを右クリックして「黒のマスクを追加」を選択します。

f:id:halya_11:20191110183240p:plain

マスクがかかってこのレイヤーの効果が見えなくなりました。

f:id:halya_11:20191110183337p:plain

マスクを塗る

レイヤーからこのマスクを選択した状態でモデルを塗るとマスクされた部分が表示されます。

f:id:halya_11:20191110183646g:plain

ちなみに、モデルではなくUV展開されたテクスチャを塗ることもできます。
この場合にはPROPRETIES - ペイントのアラインメントをUVにしておきます。
(これをやらないとブラシサイズが定まらず塗りづらい)

f:id:halya_11:20191110184014p:plain

テクスチャを塗る場合もマスクを選択した状態で左ドラッグするだけです。

f:id:halya_11:20191110184418g:plain

ポリゴン単位で塗る

また、ポリゴン毎に塗ることもできます。
この場合、ツールバーからPolygon Fillを選択します。

f:id:halya_11:20191110185726p:plain

このモードで左ドラッグをするとポリゴン毎に塗ることができます。

f:id:halya_11:20191110184752g:plain

特定のマップだけを塗る

次に特定のマップだけ塗ってみます。
いま、以下のように塗られているとします。

f:id:halya_11:20191110191616p:plain

目の部分に木のHeightが適用されてしまっているので、これを上書きして消します。
この場合まずレイヤーを追加し、表示モードをHeightにしてブレンドモードを通常にします。

f:id:halya_11:20191110191818g:plain

次にPROPERTIES - ペイントから有効なマップをheightだけにして、Heightの値を0に設定します。

f:id:halya_11:20191110191946p:plain

後は普通に目の部分を塗りつぶします。

f:id:halya_11:20191110192428p:plain

目の部分だけHeightがゼロになりました。
もちろん塗りつぶしレイヤーとマスクでやってもOKです。

書き出す

それでは今回作ったテクスチャを書きだします。
まずファイル > Export Texturesを選択してエクスポートウィンドウを開きます。
ConfigにUnity 5(Standard Metallic)を選択するとUnityのPBR用のテクスチャセットが書き出されます。

f:id:halya_11:20191110192916p:plain

ただしこのままだとHeightマップが書き出されないようなので、CONFIGURATIONタブで設定します。
下図のようにUnity 5(Standard Metallic)を選択して、プリセットコピーボタンを押します。
その後マップ追加ボタンをクリックします。

f:id:halya_11:20191110194054p:plain

マップが追加されたら名前を変更し、RGB欄にHeightプロパティをドラッグ&ドロップ、Gray Channelを選択します。

f:id:halya_11:20191110193634p:plain

エクスポートタブに戻って先ほど作ったConfigを選択しなおすと、Heightマップも対象に入っていることが確認できます。

f:id:halya_11:20191110194214p:plain

この状態でエクスポートボタンを押すと各テクスチャがエクスポートされます。

f:id:halya_11:20191110194301p:plain

Unityに取り込む

最後にこれをUnityに取り込んでみます。
まず、先ほどのマップを全てインポートします。
Normal MapだけはInspectorからTexture TypeをNormal mapにしておきます。

f:id:halya_11:20191110195039p:plain

次にStandardShaderをアサインしたマテリアルを作成し、先ほどのマップをアサインします。

f:id:halya_11:20191110194949p:plain

後はこれを別途インポートしてFBXのマテリアルとして設定するだけです。
これをシーンに配置してライトをベイクすると、以下のようにレンダリングされます。

f:id:halya_11:20191110195253p:plain

無事Unityに取り込むことができました。