マテリアルグラフ
標準のマテリアルでは足りないときは、ノードから独自のマテリアルを作れます。グラフを使って、全画面エフェクトを作ることもできます。
たいていのプロジェクトは、標準のマテリアルの種類でまかなえます。足りないときは、ノードをつないでグラフを作りましょう。エディターがそれを本物のマテリアルに変換します。
スクロールするテクスチャ、ディゾルブ、ホログラム、水、見る角度で変わる色、はためく旗など、決まった形のマテリアルではできない表現にグラフを使います。
シェーダーノードのリファレンス(95 ノード)に、すべてのノードとそのポートが載っています。
グラフのマテリアルでも、standard、physical、toon などの組み込みの種類と同じライティングが得られ、モバイルでも動きます。
マテリアルグラフを作る
- 左レールから Material editor を開きます。
- + Create material をクリックして、空のグラフから始めます。または Clone an existing material をクリックして、今あるマテリアルのコピーから始めます。
- ノードを追加し、入力から出力ノードへとつなぎます。
- ほかのマテリアルと同じように、オブジェクトに使います。
Project assets でもグラフを作れます。右クリックして、Create asset → Material graph を選びます。
グラフのしくみ
グラフは、入力から計算を通って出力へと流れます。ノードは次のグループに分かれています。
| グループ | 含まれるもの |
|---|---|
| Inputs | UV、表面の法線、時間、位置、テクスチャ、いま描画しているのがどのコピーか |
| Constants | 入力した固定の数値や色 |
| Math | 1 つの数値に対する算術やカーブ |
| Vectors | ベクトルや色の組み立て、分解、混合、回転 |
| Lighting | 自分で調整するライティングの項 |
| Post-processing | 描画されたフレームを読み取るノード。スクリーンエフェクトを参照 |
| Output | 最終的な表面の見た目 |
表面の出力
グラフは出力ノードで終わります。出力ノードの入力で、表面の性質を指定します。
| 出力 | 意味 |
|---|---|
baseColor | 表面の色 |
metallic | 金属でないものは 0、むき出しの金属は 1。中間の値はほとんど使いません |
roughness | 0 は鏡のようになめらか、1 は完全なつや消し |
normal | 表面の細かい凹凸を加えるための、独自の法線 |
emissive | 表面自体が発する光 |
alpha | 透明度 |
clearcoat · clearcoatRoughness | 表面に重ねる透明なラッカー層 |
ior · transmission · thickness | 表面を通る光の屈折。ガラスや液体に使います |
つながっていない出力は初期値のままです。使っていない出力は負荷になりません。
コピーごとに見た目を変える
2 つの入力ノードは、1 つのオブジェクトを何度も描画するインスタンス化されたオブジェクトのためのものです。
instanceIdは、いまどのコピーを描画しているかを表します。instanceColorは、そのコピーの色合いを返します。
instanceId をハッシュに通すと、コピーごとに色合い、大きさ、アニメーションのタイミングが変わります。葉の 1 枚 1 枚が少しずつ違う揺れ方をする草も、すべての葉が一斉に揺れる草と同じ負荷で作れます。
通常のオブジェクトでは、どちらのノードも安全な初期値を返します。そのため、インスタンス化されていないオブジェクトでも、グラフはそのまま動きます。
スクリーンエフェクト
描画されたフレームを読み取るグラフは、シーン全体にかかる全画面エフェクトになります。オブジェクトに付けるものではありません。カラーグレーディング、ビネット、ぼかし、走査線などに使います。
特別な設定は要りません。screenColor のように、フレームを読み取るノードをグラフで使った時点で、エフェクトになります。
エフェクトを追加するには、次の手順に従います。
- Space settings を開きます。
- Post-processing のセクションがまだなければ、+ Add feature をクリックして Post-processing を選びます。
- + Add effect をクリックし、作ったグラフを選びます。
複数のエフェクトは、指定した順番で適用されます。
テクスチャと色
テクスチャノードは、プロジェクト内の画像を読み込みます。カラー画像は自動で変換されるので、計算は正しい色の値で行われます。
ラフネスマップ、マスク、ハイトマップなど、色ではなく数値を持つテクスチャがあります。これらをデータとして指定しないと、色補正がかかって値が少しずれます。ラフネスマップが思ったとおりに見えないとき、いちばん多い原因がこれです。
シーンの実行中にグラフのマテリアルを変える
スクリプトから、グラフの設定は変更できません。スクリプトはグラフのコンポーネントにアクセスできないからです。それでも、よくある 2 つの用途には対応できます。
| やりたいこと | 方法 |
|---|---|
| ひとりでに動くアニメーション | グラフの中で time 入力を使い、脈打つ光、スクロール、きらめきを作ります |
| ゲームの状況に反応する変化 | 通常のマテリアルを使います。スクリプトから emissiveIntensity、color、opacity、roughness を変更できます |
例えば、ずっと脈打つように光り続けるビーコンは、time を読み取るグラフで作ります。プレイヤーが得点すると明るくなるビーコンは、標準マテリアルの emissiveIntensity をスクリプトで変えて作ります。
ヒント
- 既存のマテリアルから始めましょう。Clone an existing material を使うと、標準マテリアルがグラフに変換され、正しくそろった出発点が手に入ります。空のキャンバスから始めると、作り直す必要のなかったライティングまで組むことになります。
- 追加するものに気をつけましょう。グラフは毎フレーム、ピクセルごとに実行されます。テクスチャの読み取りは軽いですが、ループは重くなります。編集したあとにフレームレートが落ちたら、最後に追加したノードを確認してください。
- 1 つの見た目には 1 つのグラフを使いましょう。グラフを変更すると、そのグラフを使うすべてのオブジェクトが更新されます。見た目を直す場所が 1 か所で済みます。
次へ: パーティクル — 炎、煙、火花、ほこりを作ります。