メインコンテンツまでスキップ

マテリアルグラフ

標準のマテリアルの種類で、プロジェクトに必要なものはたいてい足ります。足りないときは、マテリアルを グラフとして組み立てられます。ノードをつなぐと、エディターがそれを本物のシェーダーへ コンパイルします。

固定のマテリアルでは表現できないものが欲しいときに使います。流れるテクスチャ、ディゾルブ、 ホログラム、水、見る角度で変わる色、はためく旗など。

各ノードとそのポート: シェーダーノードのリファレンス(95 ノード)

すべてのマテリアルは、すでにグラフです

組み込みの種類は、グラフを後付けした別系統ではありません。standardphysicaltoon などは それ自体が、この同じ空間の中の一点です。ですからグラフのマテリアルは二流市民ではありません。 同じ経路を通り、同じライティングを受け、モバイルでも動きます。

グラフの形

グラフは入力から演算を通って出力へ流れます。

カテゴリーそこにあるもの
inputUV、法線、時間、位置、テクスチャ、いま描いているインスタンス
const自分で入力する固定の数値と色
math単一の数値に対する算術とカーブ
vectorベクトルと色の組み立て・分解・合成・変換
light自分で形を決めるライティングの項
post描画済みのフレームをサンプリングするノード → 画面エフェクト
output表面が実際にどう見えるか

サーフェスの出力

出力ノードがグラフの終点で、その入力は表面の物理的な記述です。

出力意味
baseColor表面の色
metallic誘電体なら 0、むき出しの金属なら 1。中間はまれです
roughness0 は鏡のように滑らか、1 は完全なマット
normal自前の法線を入れて、表面のディテールを足します
emissive表面が自ら発する光
alpha透明度
clearcoat · clearcoatRoughness上に載る漆のような層
ior · transmission · thickness屈折。ガラスや液体に

つながずに残した出力は既定値のままで、コンパイラーが畳み込みます。使わない出力のコストは ゼロです。

インスタンスを扱う

インスタンス化されたオブジェクトのために、専用の入力ノードが 2 つあります。instanceId はいま描いているコピーの番号を、instanceColor はそのコピーの 色味を返します。

1000 個のオブジェクトが「1 個」に見えなくなるのは、これのおかげです

instanceId をハッシュに通せば、コピーごとに固有の色味・大きさ・アニメーションの位相が得られます。 しかも描画は 1 回のままです。すべての草が少しずつ違う揺れかたをする草原のコストは、全部が同じに 揺れる草原と変わりません。

どちらも、ふつうのメッシュ上では妥当な既定値を読みます。ですから、これらを使ったグラフを インスタンス化していない場所で使っても壊れません。

画面エフェクト

描画済みのフレームをサンプリングするグラフは、もはや表面のマテリアルではありません。シーン 全体に重ねる全画面のエフェクトです。カラーグレーディング、ビネット、ぼかし、走査線など。

エンジンはそれを自分で見分けます。フレームを読むノードを使うと、そのグラフはオブジェクトに載せる ものではなくエフェクトになります。1 つのシーンに複数のエフェクトがある場合は、指定した順に 実行されます。

テクスチャと色空間

テクスチャノードは画像リソースをサンプリングします。カラー画像はこちらでデコードするので、 演算は実際の色の値に対して行われます。

データのテクスチャは「データ」として指定してください

色ではなく数値を運ぶテクスチャ(roughness マップ、マスク、ハイトマップ)は、そう指定しなければ なりません。さもないと色補正がかかり、値がわずかに狂います。「roughness マップが本来の見た目と まるで違う」の原因は、圧倒的にこれです。

script はグラフの中に手を伸ばせません

script からグラフの component にはアクセスできないので、コードからグラフのパラメーターを設定する ことはできません。

聞こえるほどの制約ではありません。よく求められる 2 つのことは、どちらも別の手段で満たせるからです。

やりたいことやりかた
自動で動き続けるものグラフのtime 入力を使う。脈動・スクロール・きらめきはここの領分です
ゲームの状態で動かすもの代わりに通常のマテリアルスロットを動かす。script は emissiveIntensitycoloropacityroughness に書き込めます

つまり、ずっと脈打つビーコンは time を読むグラフ。プレイヤーが得点したときに明るくなるビーコンは、 標準マテリアルの emissiveIntensity に書き込む script です。

実践的なアドバイス

プリセットから始めてください。 標準マテリアルをグラフとして複製すれば、正しく完全な出発点が 手に入ります。空のキャンバスから組むというのは、導き直す必要のなかったライティングを一から 導き直すということです。

何を足すかに気を配ってください。 グラフは 1 ピクセルごと、1 フレームごとに走ります。 テクスチャの参照は安価ですが、ループはそうではありません。編集のあとフレームレートが落ちたら、 最後に足したノードが容疑者です。

リソースとして保存すれば、それを使うすべてのオブジェクトが一度に更新されます。見た目を 直したいときの修正箇所も 1 か所で済むということです。


次へ: パーティクル — 炎・煙・火花・埃。