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