マテリアルグラフ
標準のマテリアルの種類で、プロジェクトに必要なものはたいてい足ります。足りないときは、マテリアルを グラフとして組み立てられます。ノードをつなぐと、エディターがそれを本物のシェーダーへ コンパイルします。
固定のマテリアルでは表現できないものが欲しいときに使います。流れるテクスチャ、ディゾルブ、 ホログラム、水、見る角度で変わる色、はためく旗など。
各ノードとそのポート: シェーダーノードのリファレンス(95 ノード)
組み込みの種類は、グラフを後付けした別系統ではありません。standard・physical・toon などは
それ自体が、この同じ空間の中の一点です。ですからグラフのマテリアルは二流市民ではありません。
同じ経路を通り、同じライティングを受け、モバイルでも動きます。
グラフの形
グラフは入力から演算を通って出力へ流れます。
| カテゴリー | そこにあるもの |
|---|---|
| input | UV、法線、時間、位置、テクスチャ、いま描いているインスタンス |
| const | 自分で入力する固定の数値と色 |
| math | 単一の数値に対する算術とカーブ |
| vector | ベクトルと色の組み立て・分解・合成・変換 |
| light | 自分で形を決めるライティングの項 |
| post | 描画済みのフレームをサンプリングするノード → 画面エフェクト |
| output | 表面が実際にどう見えるか |
サーフェスの出力
出力ノードがグラフの終点で、その入力は表面の物理的な記述です。
| 出力 | 意味 |
|---|---|
baseColor | 表面の色 |
metallic | 誘電体なら 0、むき出しの金属なら 1。中間はまれです |
roughness | 0 は鏡のように滑らか、1 は完全なマット |
normal | 自前の法線を入れて、表面のディテールを足します |
emissive | 表面が自ら発する光 |
alpha | 透明度 |
clearcoat · clearcoatRoughness | 上に載る漆のような層 |
ior · transmission · thickness | 屈折。ガラスや液体に |
つながずに残した出力は既定値のままで、コンパイラーが畳み込みます。使わない出力のコストは ゼロです。
インスタンスを扱う
インスタンス化されたオブジェクトのために、専用の入力ノードが
2 つあります。instanceId はいま描いているコピーの番号を、instanceColor はそのコピーの
色味を返します。
instanceId をハッシュに通せば、コピーごとに固有の色味・大きさ・アニメーションの位相が得られます。
しかも描画は 1 回のままです。すべての草が少しずつ違う揺れかたをする草原のコストは、全部が同じに
揺れる草原と変わりません。
どちらも、ふつうのメッシュ上では妥当な既定値を読みます。ですから、これらを使ったグラフを インスタンス化していない場所で使っても壊れません。
画面エフェクト
描画済みのフレームをサンプリングするグラフは、もはや表面のマテリアルではありません。シーン 全体に重ねる全画面のエフェクトです。カラーグレーディング、ビネット、ぼかし、走査線など。
エンジンはそれを自分で見分けます。フレームを読むノードを使うと、そのグラフはオブジェクトに載せる ものではなくエフェクトになります。1 つのシーンに複数のエフェクトがある場合は、指定した順に 実行されます。
テクスチャと色空間
テクスチャノードは画像リソースをサンプリングします。カラー画像はこちらでデコードするので、 演算は実際の色の値に対して行われます。
色ではなく数値を運ぶテクスチャ(roughness マップ、マスク、ハイトマップ)は、そう指定しなければ なりません。さもないと色補正がかかり、値がわずかに狂います。「roughness マップが本来の見た目と まるで違う」の原因は、圧倒的にこれです。
script からグラフの component にはアクセスできないので、コードからグラフのパラメーターを設定する ことはできません。
聞こえるほどの制約ではありません。よく求められる 2 つのことは、どちらも別の手段で満たせるからです。
| やりたいこと | やりかた |
|---|---|
| 自動で動き続けるもの | グラフの中で time 入力を使う。脈動・スクロール・きらめきはここの領分です |
| ゲームの状態で動かすもの | 代わりに通常のマテリアルスロットを動かす。script は emissiveIntensity・color・opacity・roughness に書き込めます |
つまり、ずっと脈打つビーコンは time を読むグラフ。プレイヤーが得点したときに明るくなるビーコンは、
標準マテリアルの emissiveIntensity に書き込む script です。
実践的なアドバイス
プリセットから始めてください。 標準マテリアルをグラフとして複製すれば、正しく完全な出発点が 手に入ります。空のキャンバスから組むというのは、導き直す必要のなかったライティングを一から 導き直すということです。
何を足すかに気を配ってください。 グラフは 1 ピクセルごと、1 フレームごとに走ります。 テクスチャの参照は安価ですが、ループはそうではありません。編集のあとフレームレートが落ちたら、 最後に足したノードが容疑者です。
リソースとして保存すれば、それを使うすべてのオブジェクトが一度に更新されます。見た目を 直したいときの修正箇所も 1 か所で済むということです。
次へ: パーティクル — 炎・煙・火花・埃。