Substance Designer Tutorial @ 3DCG Meetup No13

このページは、「 Substance Designer を始めてみませんか?」と題した、 Substance Designer の初心者向けチュートリアルの講演で使ったスライドに加筆修正したものです。

3 つのチュートリアルにはそれぞれシーンファイル( .sbs )を添付しました。

Substance Designer を始めてみませんか?

概要

今回は、 Substance Designer の機能を使ってPBR用のテクスチャーを作成する手順の紹介です。
仕事で使えれるようになれば、テクスチャーの作成が効率的になるかも!?

対象

  • Photoshop で限界を感じている方
  • Substance Designer を始めてみたい方
  • Substance Designer って難しいと感じている方

アジェンダ

  1. Substance Designer の利点
  2. Substance Designer の基本
  3. Substance Designer だけを使ったワークフロー
    1. テクスチャーを作成する
    2. マテリアルを作成する
    3. 形状を基にした質感を作成する
  4. 時間があれば質疑応答

補足

帰宅したらすぐに復習できる内容にするつもりです。
今回の話は PBR に寄った内容になってはいますが、ノンフォト・リアルスティックな分野でも応用できるはずです。

業務でバリバリ使っている方は退屈な内容かも知れません。(後で情報交換しませんか?)

自己紹介

  • Technical Artist
    • Substance designer
    • Houdini, Houdini Engine
    • (Maya)
    • (Photoshop)

日本の都内某所にある、ゲーム開発スタジオに勤務しています。
勉強を兼ねて趣味で作ったフィルターなどを Substance Share にアップしています。

Substance Designer の利点

画像に対して特定の加工を施すための機能を ノード として実装されています。

  • ノードには画像を受け取る 入力 があります。(入力がない場合もあります。)
  • ノードでは 何らかの処理 を行います。
  • ノードの処理の結果が 出力 されます。

ノードは他のノードに接続されることで処理の結果を次々に渡すことで、パターンやノイズなどの画像の生成とそれらの加工をプロシージャルに作ることができます。

画像処理の手続きをビジュアルプログラミングして画像を作成します。
ノードの集合体をパッケージ化して入力やパラメーターを変えるだけで、同一のルールに基づいた画像のバリエーションが簡単に生成できます。
イテレーションの多いワークフローやバリエーションが必要な時には特に効果的でしょう。

Substance はゲーム制作におけるテクスチャー作成に特化した処理になっています。

  • 解像度は必ず2のべき乗になる。
  • 意識せずとも、リピート(タイリング)可能な画像を生成出来る。

また、 Photoshop のドキュメント( PSD や PSB )と比べて、ほとんどの場合にシーンファイルの容量を抑えられます。
(メッシュ情報をベイクした画像がある場合はその分だけ増えます。)

Substance Designerの基本

今回使用しているツールのバージョンは 2017.2.2 です。

Substance Designer を立ち上げます。
gamecgdrops_20171209_SubstanceDesigner_01_Welcome.png

パッケージとグラフ

パッケージ

パッケージとは、複数のグラフを持った Substance Designer のシーンファイル。
テクスチャーやマテリアルパラメーターの生成に関した様々なデータや情報が設定・保存されている。

  • グラフとパラメーター
  • リソースデータ
  • 入力・出力

グラフ

グラフとは、テクスチャーやマテリアルパラメーターを生成するために、様々なノードを使って画像処理の工程を構築するためのネットワーク。

  • Output
  • Input
    • Color Image Input
    • Grayscale Image Input

インスタンス化(入れ子)

例えばグラフ A に、別のパッケージに含まれるグラフ B をインスタンスとしてインポートして使うことができます。

インターフェイス

インターフェイスについて。

gamecgdrops_20171209_SubstanceDesigner_02_Interface.png

グラフ

キャンバスにノードを作成して画像を生成し、他のノードに接続することで加工していきます。

パラメーター

アクティブなノードやグラフに関係のあるコンテキストが表示されます。

エクスプローラー

ユーザーが作成したパッケージリソースを管理することができます。

  • パッケージ
    • グラフ
    • 入力と出力
    • リソース
    • ビットマップ形式やベクター形式の画像
    • メッシュ
    • 関数
  • 依存関係などの情報

3D View

メッシュが持つマテリアルに対して、編集中のノードやグラフをアサインして視覚化することができます。

リアルタイムかレイトレースの2 つのレンダラの中から選択・切り替えられます。

  • OpenGL
  • Iray

ポストフィルターを有効にすることで、ゲーム開発の最終結果に近い結果で画面を見ることができます。

  • Yebis 3 (Silicon Studio)

2D View

編集中のノードの処理結果を視覚化することができます。

  • タイリング表示
  • ガンマ
  • ヒストグラム
  • 表示チャンネル選択
  • 値の表示

ライブラリー

リソースの管理・検索することができます。

  • ビットマップ形式やベクター形式の画像
  • メッシュ
  • パッケージとグラフ
  • シェーダー

サブスタンスを作成する

新しいサブスタンスを作成するには、 File > New Substance… メニューから開始するのが手っ取り早いでしょう。
(パッケージとグラフを一度に作ってくれます。)

New Substance を実行するとパッケージが作られ、そのパッケージ中にグラフが作られますが、この時に テンプレート を選ぶことになります。
gamecgdrops_20171209_SubstanceDesigner_03_NewSubstanceGraph.png

テンプレート > グラフがカラの状態から始める

何もないまっさらな状態から始めることができます。

  • Empty

出力ノードが作成済みの状態から始める

次のテンプレートは、 PBR 向けのマテリアルを作成するテンプレートで始めることができます。

  • Physicall Based (Metallic/Roughness)
  • Physicall Based (Specular/Glossiness)

次のテンプレートは、昔のシェーダー向けのテンプレート。

  • Standard

次のテンプレートは、スキャンプロセッシングでテクスチャーを生成して、 PBR 向けのマテリアルを作成するテンプレート。

  • Scan Processing Physicall Based (Metallic/Roughness)
  • Scan Processing Physicall Based (Specular/Glossiness)

次のテンプレートは、材質を測定した値から PBR 向けのマテリアルを作成するテンプレート。

  • AxF To PBR Metallic Roughness
  • AxF To PBR SpecularGlossiness
  • Appearance Exchange Format から変換するワークフロー。

次のテンプレートは、HDR パノラマ作成向けの画像を作成するテンプレート。

  • Studio Panorama

次のテンプレートは、 Substance Painter 向けのフィルタやジェネレータを作成するテンプレート。

  • Painter Filter (Generic)
  • Painter Filter (Specific)
  • Painter Filter (Specific with Additional maps)
  • Painter Generator with Additional maps)

基本ノードの説明

今回の公演では時間の関係上、基本ノードの中でも特に重要なノードだけを抜粋して紹介します。

基本ノードは次のいずれかで呼び出すことができます。

  • 右クリックのコンテキストメニュー
  • グラフ上部のノードバー
  • スペースキー
    • ライブラリーを含むノードの検索ができます。

Uniform

均一色で塗りつぶされた画像を生成するノード。
gamecgdrops_20171209_SubstanceDesigner_03_AtomicNode_UniformColor.png

Blend

2 つのノードを合成するノード。
マスク画像も接続すれば合成するウェイトも定義できます。
gamecgdrops_20171209_SubstanceDesigner_03_AtomicNode_Blend.png

Transformation 2D

入力した画像の移動・回転・拡大縮小を行うノード。
gamecgdrops_20171209_SubstanceDesigner_03_AtomicNode_Transformation2D.png

Levels

レベル補正を行うノード。
gamecgdrops_20171209_SubstanceDesigner_03_AtomicNode_Levels.png

Gradient map

グラデーションを作成するノード。
Ramp と呼ばれたりもします。
gamecgdrops_20171209_SubstanceDesigner_03_AtomicNode_GradientMap.png

Curve

カーブを作成するノードではなく、曲線使ったトーンを調整するノード。
Photoshop ではトーンカーブと呼ばれています。
gamecgdrops_20171209_SubstanceDesigner_03_AtomicNode_Curve.png

Grayscale Conversion

各チャンネルのウェイトに基づいてグレースケール値を求めるノード。
gamecgdrops_20171209_SubstanceDesigner_03_AtomicNode_GrayscaleCoversion.png

ここまでで、なんとなく基本的な機能を知れたかと思いますので、実際に何か作ってみることにしましょう。

Substance Designer でプロシージャルテクスチャーを作成する

今回使用しているツールのバージョンは 2017.2.2 です。

目標

ここでは、 3 種類の色がブレンドされたこの模様のテクスチャーを目標とます。
gamecgdrops_20171209_SubstanceDesigner_04_Basic_BlendColor_01.png

3 種類の色をブレンドしたい

gamecgdrops_20171209_SubstanceDesigner_04_Basic_BlendColor_02_Start.png

3 種類の色はどう作られているのか?

複雑に見えるこのグラデーションは、単純なパターンが元になっています。
gamecgdrops_20171209_SubstanceDesigner_04_Basic_BlendColor_03_Pattern.png

回転を戻していくと単純なパターンだということがわかりやすくなります。
gamecgdrops_20171209_SubstanceDesigner_04_Basic_BlendColor_04_PatternUndoRotate_1.png

45 度戻し終えました。
gamecgdrops_20171209_SubstanceDesigner_04_Basic_BlendColor_04_PatternUndoRotate_2.png

3 種類の色はどう塗分けられているのか?

3 種類の色はどう塗分けられているのかを考えてみます。
gamecgdrops_20171209_SubstanceDesigner_04_Basic_BlendColor_05_OriginalShape.png

実は、3 色の模様は、こういったグレースケールから作られています。
gamecgdrops_20171209_SubstanceDesigner_04_Basic_BlendColor_06_OriginalWeight.png

グレースケールの同じ値を選択出来れば、一定の幅を持ったラインの様な模様が得られます。
例えば、値が 0.5 になっているピクセルだけを選択出来れば、直線が作られます。

そのグラデーションを回転させてからリピートしたもので作られています。
gamecgdrops_20171209_SubstanceDesigner_04_Basic_BlendColor_07_Weight.png

ブレンドのマスク

ブレンドノードには マスク を受け付ける入力があります。
このマスクは、2 つの色を重ねてブレンドする際のウェイトと言い換えても良いでしょう。

グラデーションの特定の範囲を抜き出せれば、塗分け用のマスクが作れます。

例えば、 Levels ノードを使って入力側の最小値を変えてみましょう。
gamecgdrops_20171209_SubstanceDesigner_04_Basic_BlendColor_08_Level.png

このスクリーンショットで使われている Levels ノードは、次のような値を設定しました。

  1. Levels
    • Input Low: 0.25
    • Input High: 1.00
  2. Levels
    • Input Low: 0.50
    • Input High: 1.00
  3. Levels
    • Input Low: 0.75
    • Input High: 1.00

さらに、Levels ノードで、入力の最小値と入力の最大値をお互いに極端に近づければ、 2 諧調になります。
gamecgdrops_20171209_SubstanceDesigner_04_Basic_BlendColor_09_BlackAndWhiteConversion.png

このスクリーンショットで使われている Levels ノードは、次のような値を設定しました。

  1. Levels
    • Input Low: 0.25
    • Input High: 0.25
  2. Levels
    • Input Low: 0.50
    • Input High: 0.50
  3. Levels
    • Input Low: 0.75
    • Input High: 0.75

グラフの作成

まず、塗りつぶしの元になる Brick ノードを作成します。
次に、 Transform 2D ノードを作成して模様を回転させます。
( Brick ノードの出力を Transform 2D ノードの入力に繋げます。)

Levels ノード・ Gradient map ノード・ Curve ノードのいずれかを使って、グレースケールのグラデーション画像を加工し、ブレンドのためのマスクを作成します。

Uniform Color ノードを作って合成したい 3 色を表現します。
2 つの色をブレンドさせるために Blend ノードを作成して接続します。
グラデーションの値を元にして作ったマスクを、 Blend ノードのマスクインプットに接続します。

gamecgdrops_20171209_SubstanceDesigner_04_Basic_BlendColor_10_Finish.png

シーンファイル

Substance Designer のシーンファイルを用意しましたので、参考にして下さい。
gamecgdrops_20171209_SubstanceDesigner_Basic_1_Texture.zip

次はマテリアルを作ってみましょう。

Substance Designer でプロシージャルなマテリアルを作成する

今回使用しているツールのバージョンは 2017.2.2 です。

PBR 用のシェーダーを使いますが、「プロシージャルなマテリアルを作成する」というワークフローを学ぶのが本題です。
全体の流れがわかるようにしたいので、それぞれの要素は作りこまずに進めます。

  • レンガ(モチーフ):
    Library > Generator > Pattern から使えそうなものを選ぶ。
  • ノイズ:
    Library > Generator > Noise から使えそうなものを選ぶ。

目標

ここでは、目地とレンガの質感を持ったマテリアル作成を目標とします。
gamecgdrops_20171209_SubstanceDesigner_05_PbrMaterial_01.png

ポリゴンメッシュは使わずに、テクスチャーだけでそれらしいマテリアルを作ってみましょう。

レンガのマテリアルを作成したい

Physicall Based (Metallic/Roughness) のテンプレートから始めましょう。

形状を作る

まず、形状を作っていきますが、 形状が出来上がるまでは形状以外の要素は邪魔 なので、仮に無難な値にしておきます。

Uniform Color ノードと Output ノードを作り、それぞれを接続しておきましょう。
(テンプレートを元に作業を始めると楽です。)

  • Base Color: 0.5, 0.5, 0.5
  • Roughness: 0.5
  • Metallic: 0.0
  • Height: 0.5
  • Normal: 0.5, 0.5, 1.0
  • Ambient Occlusion: 1.0

それでは準備ができたので形状を作っていきましょう。
ポリゴンメッシュは使わずにテクスチャーだけで形状を作るには、起伏と傾きの情報が必要です。

Library > Generator > Pattern から Brick ノードをグラフに読み込んできましょう。
gamecgdrops_20171209_SubstanceDesigner_05_PbrMaterial_02_Height.png

Brick ノードにあるパラメーターを調整しながら自分の好きな比率のレンガを作ります。

高さ情報から法線情報へ変換するために、 Normal ノードを作成します。
Output ノードの Height map と Normal map に接続します。

起伏が起きると形状の入り組んだ部分には影ができます。
直接光の影はライト側で作られますが、間接光の影(遮蔽率)はマテリアル側で定義します。
形状が決まってきたら、全方位からの光の影響度を決める均一な影も同時に出力すると良いでしょう。

Ambiento Occlusion を作ってあげましょう。
高さ情報から Ambiento Occlusion へ変換するためのノードがライブラリーにあります。
Output ノードの Ambiento Occlusion map に接続します。

gamecgdrops_20171209_SubstanceDesigner_05_PbrMaterial_03_Height_Normal_AO.png

バリエーション

レンガの個々のばらつきなどは、 Brick ノードのパラメーターを調整することで表現できます。

  • 埋まりすぎているレンガブロックがある。
  • 斜めに組み上げられたレンガブロックがある。

Brick ノードの結果を高さ情報と定義しています。
Brick ノードの輝度が変わると高さが変わったことになり、グラデーションが付くと、それは高さ情報に スロープ(傾斜) が生まれたことになります。
gamecgdrops_20171209_SubstanceDesigner_05_PbrMaterial_04_Brick_Variation.png

ここまでで、主だった形状が作れたことになります。
形状が決まったら次は質感を作っていきましょう。

材質を作る

Metallic

この値は拡散反射率と鏡面反射率の元になっています。
レンガは 非金属(金属ではない) ので、真っ黒にします。

Base Color

光の反射の結果、最終的に目に届く材質の色を決めましょう。
この色は拡散反射率と鏡面反射率の元になっています。

目地とレンガとで色を変えました。
gamecgdrops_20171209_SubstanceDesigner_05_PbrMaterial_05_BaseColor.png

Roughness

ザラザラ度合いを決めましょう。
とても小さい凹凸(マイクロサーフェイス)の分布が決まります。

目地とレンガとで粗さを変えました。
gamecgdrops_20171209_SubstanceDesigner_05_PbrMaterial_06_Roughness.png

実作業では、もっと多くのノイズやパターンを追加してクォリティーを上げていきます。

  • Brick ノードにノイズなどを追加して高さ情報を作り込む。
    • 空隙( porosity, void fraction )を表現する。
  • マスク情報を作って、Blend ノードでいろいろな色を合成する。
    • 含まれる素材や焼き具合のばらつきを表現する。

シーンファイル

Substance Designer のシーンファイルを用意しましたので、参考にして下さい。
gamecgdrops_20171209_SubstanceDesigner_Basic_2_PbrMaterial.zip

次は、もう少し複雑な質感のマテリアルを作ってみましょう。

Substance Designer でメッシュを基にした質感を作成する

今回使用しているツールのバージョンは 2017.2.2 です。

ここでも PBR 用のシェーダーを使いますが、「プロシージャルなマテリアルを作成する」というワークフローを学ぶのが本題です。
全体の流れがわかるようにしたいので、それぞれの要素はそれほど作りこまずに進めます。

モチーフのモデル

Substance Share で公開されているチュートリアル用のモデルがあります。
gamecgdrops_20171209_Allegorithmic_SubstanceShare_Meshes.png

Substance Share で公開されているチュートリアル用のモデルの中から、消火栓( Fire Hydrant )を選びました。
gamecgdrops_20171209_Allegorithmic_SubstanceShare_Meshes_MaterialLayering_FireHydrant.png

目標

この様な汚れたの消火栓のマテリアル作成を目標とします。
gamecgdrops_20171209_SubstanceDesigner_06_PbrMaterialBlend_01_FireHydrant.png

どんな質感があるのか?

インターネットで資料を集めます。
gamecgdrops_20171209_SubstanceDesigner_06_PbrMaterialBlend_02_GoogleSearch.png

※実物とは他に、この Fire Hydrant モデルを使った作例も画像検索で引っかかるので注意しましょう。

マテリアルの要素を考える

インターネットで集めた資料を元にして、どんなマテリアルが必要かを考えます。

もともとの材質にはどんなものがあったのか?

  • ペンキ
  • スチール

経年劣化で付いた材質はどんなものがありそうか?

  • サビ
  • 汚れ

少なくとも、これら 4 つの材質が合成されたマテリアルが必要になりそうです。
今回の事例では、油汚れの表現に絞っています。
(泥・埃などの汚れの表現も、同じ考え方でいくつでも増やせるので、省きました。)

汚れたの消火栓のマテリアルを作成したい

Physicall Based (Metallic/Roughness) のテンプレートから始めましょう。

仮組みを行う

消火栓のマテリアルを組むための、新しいパッケージとグラフを作成します。
(グラフの名前は FireHydrant という名前にしました )

この消火栓に必要なマテリアルの全体的なノード構成を考えて、ある程度仮で組んでみます。

Uniform Color ノードと Output ノードを作り、それぞれを接続しておきましょう。
仮に、イメージが付きやすいようにわかりやすい色で無難な値にしておきます。

  • Base Color: 0.6, 0.15, 0.15
  • Roughness: 0.5
  • Metallic: 0.0
  • Height: 0.5
  • Ambient Occlusion: 1.0

ダウンロードした Substance Share の Fire Hhydrant ファイルには、ハイポリゴンのメッシュからベイクされたノーマルマップが同封されているので、 Normal の出力にはそれを使います。

また、本来は Height から Normal を作るほうが精度が良いのですが今回は作れませんので、
ライブラリーの中にある Normal to Height ノードや Normal to Height HQ ノードといった、 Normal map から Height を疑似的に生成するノードを使いましょう。

gamecgdrops_20171209_SubstanceDesigner_06_PbrMaterialBlend_03_FireHhydrant_Start.png

各材質のマテリアルを仮作成する

このパッケージに新しくグラフを 4 つ作成して、それぞれのグラフの中で 4 つの各材質に必要なノードを作成していきます。
gamecgdrops_20171209_SubstanceDesigner_06_PbrMaterialBlend_03_FireHhydrant_4Mat.png

ペンキのマテリアル( Red_Paint_Metal グラフ )
gamecgdrops_20171209_SubstanceDesigner_06_PbrMaterialBlend_04_1_RedPaintMetal.png

サビのマテリアル( Red_Rust グラフ )
gamecgdrops_20171209_SubstanceDesigner_06_PbrMaterialBlend_04_2_Rust.png

スチールのマテリアル( Gray_Steel グラフ )
gamecgdrops_20171209_SubstanceDesigner_06_PbrMaterialBlend_04_3_GraySteel.png

汚れのマテリアル( Dirt グラフ )
gamecgdrops_20171209_SubstanceDesigner_06_PbrMaterialBlend_04_4_Dirt.png

各マテリアルを合成する

4 種類のマテリアルを消火栓のマテリアル( FireHydrant グラフ)に読み込みます。
gamecgdrops_20171209_SubstanceDesigner_06_PbrMaterialBlend_05_MainGraph_ImportMaterials.png

合成する順番と塗り分けを考えます。

  • ペンキのマテリアルは、(チェーン以外の)全面に塗られている。
  • スチールのマテリアルは、チェーンのポリゴンとその UV の部分になっている。
  • サビのマテリアルは、ペンキマテリアルが塗られた部分から生まれる。
    • 腐食は、酸素や水分などと反応して起きる。
    • 経年劣化。
  • 汚れのマテリアルは、何らかの外的要件で起きる。
    • 経年劣化。
    • ホコリと雨垂れ。
    • それが油汚れなら、部品の間から垂れたりする。

適当なパターンノードを使って、とりあえず 4 つの各マテリアルを順番に合成します。
ライブラリーの中に Material Blend ノードがあるので、このグラフに読み込みます。

先ほど考えた順番を元に、ノードを組んでいきましょう。

  • ペンキマテリアルの上にサビマテリアルが乗る。
  • 合成されたサビのあるペンキマテリアルの上にスチールマテリアルが乗る
  • 最後に汚れが乗る。

また、 Material Blend ノードにもマスク情報を入力する必要があるので、塗り分けがわかりやすい適当なパターンを使って接続しておきましょう。

gamecgdrops_20171209_SubstanceDesigner_06_PbrMaterialBlend_06_MainGraph_BlendMaterials.png

リアリティーのあるマテリアルの合成

適当なパターンを使ってマテリアルをブレンドするわけにはいかないので、メッシュの形状に即した適切な方法でブレンドするための情報を作ります。

UV 展開を見ながら Photoshop で塗っていた作業の一部は、 Substance を使えば自動的に行えるものです。

gamecgdrops_20171209_SubstanceDesigner_06_PbrMaterialBlend_06_WorkOnPhotoshop.png

メッシュをテクスチャーにベイクする

メッシュから次のような情報をテクスチャーにベイクします。

  • Ambient Occlusion Map
  • Curvature Map
  • Position Map
  • World Space Normals

モデル情報のベイク

読み込んでいるモデルを右クリックしてコンテキストメニューを開き、 Bake model information を選びます。
gamecgdrops_20171209_SubstanceDesigner_06_PbrMaterialBlend_07_Bake_ModelInformation.png

…. from Mesh といった名前のベイカーを使う場合は、
(この消火栓ファイルにはハイメッシュのポリゴンが含まれていないので) Use low as high definition を有効にして、ローメッシュのポリゴン自身をベイク元とします。

Bake model information の項目

  • Select elements to bake
    • Select by: Materials/Sub-mesh
    • firee_hydrant/RootNode = On
  • Setup High Definition Models
    • Use low as high definition = Off
    • Set distance With = Values
    • Frontal value = 0.01 ~ 0.001
    • Rear value = 0.01 ~ 0.001
    • Relative to bounding box = On
    • Ignore Backface = On
    • Match = Always
    • Use Skew correction = Off
  • Bakers render list
    1. Ambient Occlusion
      • Normal Map: From Resource… > fire_hydrant_normal
      • Normal Orientation: OpenGL
    2. Curvature:
      • Baker Parameters > Details: 0.5
    3. Position:
    4. World Space Normals:

次の様に Bake model information の項目を切り替えて、チェーン部分だけをベイクする設定に変えると手早くマスクを作れるでしょう。

  • Select elements to bake
    • Select by: Sub-mesh
    • chain_*
  • Bakers render list
    1. Convert UV to SVG
      • Uniform

モデルに塗った頂点カラーやマテリアルの色をベイクすることでマスクを作ることもできます。
その場合は、 Maya などのツールが使える環境の人は、頂点カラーやマテリアルをアサインしたモデルを FBX として書き出します。
次の様に Bake model information の項目を切り替えて、事前に塗った値をテクスチャーにベイクできます。

  • Select elements to bake
    • Select by: Materials/Sub-mesh
    • firee_hydrant/RootNode = On
  • Bakers render list
    1. Color Map from Mesh
      • Vertex Color
      • Material Color

ベイクされたモデルの情報をもとに、マスクを作る

ペイントとサビ

外側の部品ほどサビているように見えたので、中心から外側へ向かうグラデーションを作ってみました。

まず、 Position map のグラデーションの値を調整します。

  • R チャンネルは、モデルの X 軸成分。
  • G チャンネルは、モデルの Y 軸成分。
  • B チャンネルは、モデルの Z 軸成分。

Gradient map ノードか Curve ノードを使って、次のような変更します。

  • 入力値が 0.0 の場合は、出力値が 1.0 になるように。
  • 入力値が 0.5 の場合は、出力値が 0.0 になるように。
  • 入力値が 1.0 の場合は、出力値が 1.0 になるように。

これで、中心から外側へ変化するグラデーションが作れます。
gamecgdrops_20171209_SubstanceDesigner_06_PbrMaterialBlend_08_BakeInfo_to_Mask_Boundary.png

汚れ

汚れは足元から受ける場合もあるので、下向きのポリゴンメッシュをマスクとして抽出します。

World Space Normal map のグラデーションの値を調整します。

  • R チャンネルは、モデルの X 軸成分。
  • G チャンネルは、モデルの Y 軸成分。
  • B チャンネルは、モデルの Z 軸成分。

Grayscale convertion ノードを使って、 G チャンネル以外のウェイトを無くします。

  • R = 0.0
  • G = 0.0
  • B = 1.0
  • A = 0.0

これで、下向きのメッシュが白くて、上向きのメッシュが黒い、グラデーションが作れます。
gamecgdrops_20171209_SubstanceDesigner_06_PbrMaterialBlend_08_BakeInfo_to_Mask_WSN_InvertY.png

この様に、ベイクしたモデル情報を加工したものとノイズやパターンを合成して、汚れの模様を作り出していきます。

この他にも、傷などから腐食が始まったらり、パーツの接合部分からオイルが垂れます。

Library > Generator > Noise から使えそうなノイズを選んでみましょう。
(こういったノイズは、実作業ではもっと拘って作り込むのが良いですが、今回は簡単にすませます。)

gamecgdrops_20171209_SubstanceDesigner_06_PbrMaterialBlend_08_BakeInfo_to_Mask_MaskGenerators.png

各マテリアルを作りこむ

ここからは、他の要素のことは気にせずに、4 種類のマテリアルそれぞれの質感だけを追及していきます。
グラフを分けてあるので、素材単品の質感作成に集中しやすいですし、各マテリアルを統合している消火栓マテリアルの FireHydrant グラフを見れば作り込みすぎないで作業ができるはずです。

ペンキのマテリアル( Red_Paint_Metal グラフ )
gamecgdrops_20171209_SubstanceDesigner_06_PbrMaterialBlend_09_1_RedPaintMetal_Preview.png

サビのマテリアル( Red_Rust グラフ )とサビ用のマスク
gamecgdrops_20171209_SubstanceDesigner_06_PbrMaterialBlend_09_2_Rust_Mask_Preview.png

gamecgdrops_20171209_SubstanceDesigner_06_PbrMaterialBlend_09_2_Rust_Preview.png

スチールのマテリアル( Gray_Steel グラフ )とスチール用のマスク
gamecgdrops_20171209_SubstanceDesigner_06_PbrMaterialBlend_09_3_GraySteel_Mask_Preview.png

gamecgdrops_20171209_SubstanceDesigner_06_PbrMaterialBlend_09_3_GraySteel_Preview.png

汚れのマテリアル( Dirt グラフ )と汚れ用のマスク
gamecgdrops_20171209_SubstanceDesigner_06_PbrMaterialBlend_09_4_Dirt_Mask_Preview.png

gamecgdrops_20171209_SubstanceDesigner_06_PbrMaterialBlend_09_4_Dirt_Preview.png

完成

それぞれのマテリアルとマスクを用いて、順番に合成していきます。
gamecgdrops_20171209_SubstanceDesigner_06_PbrMaterialBlend_10_Fin.png

シーンファイル

Substance Designer のシーンファイルを用意しましたので、参考にして下さい。
gamecgdrops_20171209_SubstanceDesigner_Basic_3_PbrMaterialBlend.zip

質疑応答

グラフの編集について

質問

メインのグラフに別のグラフを持って来る場合に、そのインスタンスの内容を編集するのは面倒ではないか?

回答

今回説明した方法で作業を行う場合には、次の方法で対応します。

  • 編集したいものがパターン・ノイズ・グラデーションなどの画像の場合は、 Input ノード に差し替えます。
    こうすることで、メインのグラフにインポートしてきたインスタンスノードに入力が増えます。
  • 編集したいものが数値や色などのパラメーターの場合は、 そのパラメーターを持っているノードから、必要なパラメーターを Expose してあげます。
    こうすることで、メインのグラフにインポートしてきたインスタンスノードにパラメーターが増えます。

まとめ

「Substance Designer だけを使ったワークフロー」として学んで来ました。

  • Substance Designer の基本
  • テクスチャーを作成する
  • マテリアルを作成する
  • 形状を基にした質感を作成する

今回、紹介したワークフローはあくまでも一例 です。
ここまでの説明で、テクスチャーやマテリアルの作成についての大まかな流れがイメージ出来たでしょうか?

また、初心者向けのお話をしたかったので、小難しいリニアワークフローや物理ベースドレンダリングに関した説明は敢えて除外しました。

インターネットの公式サイトやユーザーコミュニティにチュートリアルや作例が多く投稿されているので、参考にしてスキルアップしていけるでしょう。

謝辞

今回講演の機会を設けて下さった、Guncy’s野澤様とめんたいこ様、ありがとうございました。

Substance Designer Tutorial @ 3DCG Meetup No13” への2件のフィードバック

追加

  1. Youtubeにチュートリアル動画を投稿してくださると助かります。やはり、文章よりも動画の方が操作手順など分かりやすいので。

    いいね

    1. コメントありがとうございます。

      確かに、動画で解説されていることの良さもあるので、画像と動画とを使い分けられたら良いですね。
      ただ、画像を貼るのも動画撮影するのも作業コストはそれぞれあるので、全てのチュートリアルを動画化出来るか不安です…。
      要望が多ければ挑戦してみたいです。

      いいね

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

w

%s と連携中

WordPress.com. テーマ: Baskerville 2 by Anders Noren

ページ先頭へ ↑

%d人のブロガーが「いいね」をつけました。