ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

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 の場合