Unity の各シェーダーはサブシェーダーの一覧から構成されます。Unity がメッシュを描画するとき、使用するシェーダーを見つけ、ユーザーのグラフィックカードで実行する最初のサブシェーダーを選択します。
Subshader { [Tags] [CommonState] Passdef [Passdef ...] }
サブシェーダーをオプションのタグ、通常の状態、パス定義として定義します。
サブシェーダーは レンダリングパス を定義し、オプションで、すべてのパスに共通の状態を設定します。さらに、サブシェーダーの特有の タグ を設定できます。
Unity がレンダリングするサブシェーダーを選択するとき、定義された各パスごとに(光の相互作用によってはさらに多く)オブジェクトを 1 回レンダリングします。オブジェクトのレンダリングは高負荷な処理であるため、シェーダーをできるかぎり最小の量のパスで定義すべきです。当然、いくつかのグラフィックのハードウェアでは必要なエフェクトを 1 回のパスでは実現できないことがあるので、その場合は複数のパスを使用するしかありません。
各パスの定義は regular Pass、Use Pass、Grab Pass のいずれかです。
パス定義で許可されるステートメントは、サブシェーダーの記述ブロックでも表示されます。これにより、すべてのパスでこの “共有の” 状態を使用することができます。
// ...
SubShader {
Pass {
Lighting Off
SetTexture [_MainTex] {}
}
}
// ...
このサブシェーダーではひとつのパスを定義し、すべてのライティングをオフにして、単に _MainTex という名前のテクスチャをもつメッシュを表示します。