Unity - Shader Graph:Master Stack(マスタースタック)
初めに
Shader Graph には、Master Stack(マスタースタック)というシェーダーの最終的な見た目が定義される終点が必ずひとつだけ含まれます。本記事では、マスタースタックについて、まとめます。
Master Stack(マスタースタック)とは
Shader Graph には、Master Stack(マスタースタック)というシェーダーの最終的な見た目が定義される終点が必ずひとつだけ含まれます。
マスタースタックには、Vertex と Fragment の 2 つのコンテキストが含まれています。Vertex コンテキストに接続された要素は全てシェーダーの頂点計算で実行され、Fragment コンテキストに接続された要素は全てシェーダーのフラグメント (あるいはピクセル) 計算で実行されます。
Block Node
コンテキスト(Vertex コンテキスト、Fragment コンテキスト)には、Block Node が含まれています。
操作 | 方法 |
---|---|
Block Node の追加 | コンテキスト内の何もない場所にマウスオーバーし、スペースキーを押すか、右クリックして “Create Node” を選択します。これにより Create Node メニューが表示され、Block Node が追加できます。 |
Block Node の削除 | Block Node を選択した状態で "Delete" を押すか、右クリックして "Delete" を選択すると Block Node が削除できます。 |
Vertex ブロック
Vertex コンテキストに含むことができる Block Node は次の通りです。
Block Node | 型 | 説明 |
---|---|---|
Normal | Vector3 | 頂点法線 |
Position | Vector3 | 頂点位置 |
Tangent | Vector3 | 頂点接線 |
Custom Interpolator | float、vec2、vec3、および vec4 | カスタム補間器 頂点ステージからピクセル ステージにデータを取り込むためにシェーダー グラフが使用する特定の計算をきめ細かく制御できます。 |
※Custom Interpolator についてはよくわかりませんでした。参考にマニュアルのリンクを載せているので、そちらをご覧ください。
Fragment ブロック
Fragment コンテキストに含むことができる Block Node は次の通りです。
Block Node | 型 | 説明 |
---|---|---|
Base Color | Vector3 | マテリアルの基本色の値 想定範囲は 0 から 1 |
Normal (Tangent Space) | Vector3 | 接線空間におけるマテリアルの法線の値 |
Normal (Object Space) | Vector3 | オブジェクト空間におけるマテリアルの法線の値 |
Normal (World Space) | Vector3 | ワールド空間におけるマテリアルの法線の値 |
Emission | Vector3 | マテリアルの放射光の色の値 想定範囲は正の数 |
Metallic | Vector1 | マテリアルのメタリック値 0 は非メタリック、1 はメタリック |
Specular | Vector3 | マテリアルのスペキュラー(鏡面反射)色の値 想定範囲は 0 から 1 |
Smoothness | Vector1 | マテリアルのスムースネス値 想定範囲は 0 から 1 |
Ambient Occlusion | Vector1 | マテリアルのアンビエントオクルージョン値 想定範囲は 0 から 1 |
Alpha | Vector1 | マテリアルのアルファ値 想定範囲は 0 から 1 |
Alpha Clip Threshold | Vector1 | アルファ値がこの設定値を下回るフラグメントが破棄される 想定範囲は 0 から 1 |
※Ambient Occlusion(アンビエント オクルージョン: 環境遮蔽)はオブジェクトの接合部分や穴、折り目などを暗く表示するエフェクト
※Vector1 は float という認識でよい
使ってみた
Emission、Smoothness、Color、Metallic の値が設定できる Shader を作ってみます。
Blackboard に Emisson 用の Vector3、Metallic、Smoothness 用の float、Base Color 用の Color を追加します。
下にいくつかの例を載せておきます。なお、Direction Light を使用しています。使用していないと光沢が見えず、 Smoothness や Metallic の影響が分かりません。
Base Color:赤、Emission=(0, 0, 0)、Metallic=0、Smoothness=0 の場合
Base Color:黒、Emission=(0, 1, 0)、Metallic=0、Smoothness=0 の場合
Emission により放射光の色を設定しています。x, y, z がそれぞれ R, G, B に対応していることが分かります。
Base Color:黒、Emission=(0, 0, 0)、Metallic=0、Smoothness=0.7 の場合
Smoothness で滑らかさを設定しています。Specular、Metallic の値に影響を受けます。
Base Color:青、Emission=(0, 0, 0)、Metallic=0.7、Smoothness=0.7 の場合