ShaderLab :プロパティー
ShaderLab: Pass

ShaderLab :サブシェーダー

Unity の各シェーダーはサブシェーダーの一覧から構成されます。Unity がメッシュを描画するとき、使用するシェーダーをみつけ、ユーザーのグラフィックカードで実行する最初のサブシェーダーを選択します。

文法

Subshader { [Tags] [CommonState] Passdef [Passdef ...] }

サブシェーダーを任意のオプションのタグ、Common State (通常状態)、パス定義の一覧とともに定義します。

詳細

サブシェーダーではレンダリングパスの一覧を定義し、任意のオプションとしてすべてのパスに共通の State (状態)を設定します。追加で、サブシェーダーの特定の Tag を設定できます。

Unity がレンダリングするサブシェーダーを選択するとき、定義された各パスごとに(光の相互作用によってはさらに多く)オブジェクトを 1 回レンダリングします。オブジェクトのレンダリングは高価な処理であるため、シェーダーをできるかぎり最小の量のパスで定義すべきです。当然、いくつかのグラフィックのハードウェアでは必要なエフェクトを 1 回のパスでは実現できないことがあるので、その場合は複数のパスを使用するしかありません。

各パスの定義は regular PassUse Pass、または Grab Pass のいずれかです。

パス定義で記述できるステートメントはサブシェーダーの記述ブロックでも現れることがあります。これによりすべてのパスが“共有の” State (状態)を使用することができます。

// ...
SubShader {
    Pass {
        Lighting Off
        SetTexture [_MainTex] {}
    }
}
// ...

このサブシェーダーではひとつのパスを定義し、すべてのライティングをオフにして、単に _MainTex という名前のテクスチャをもつメッシュを表示します。

ShaderLab :プロパティー
ShaderLab: Pass