ShaderLab で SubShader を定義するには、SubShader ブロックを使用します。このページでは、SubShader ブロックの使用について説明します。
シェーダーオブジェクトの仕組みや、シェーダーオブジェクト、SubShader、Pass の関係については、シェーダーオブジェクトの基礎 を参照してください。
シェーダーオブジェクトには、1 つまたは複数の SubShader が含まれます。SubShader により、異なるハードウェア、レンダリングパイプライン、ランタイム設定に応じて、異なる GPU 設定とシェーダプログラムを定義することができます。シェーダーオブジェクトには 1 つの SubShader しか含まれていないものもあれば、さまざまな構成をサポートするために複数の SubShader を含むものもあります。
| 機能名 | ビルトインレンダーパイプライン | ユニバーサルレンダーパイプライン (URP) | HD レンダーパイプライン (HDRP) | カスタム SRP | 
|---|---|---|---|---|
| ShaderLab:サブシェイダーブロック | 可 | 可 | 可 | 可 | 
ShaderLab では、SubShader ブロックを Shader ブロック内に配置して SubShader を定義します。
SubShader ブロック内で、以下を行うことができます。
LOD ブロックを使って、LOD 値を SubShader に割り当てます。LOD を SubShader に割り当てる を参照してくださいTags ブロックを使用して、データのキーと値のペアを SubShader に割り当てます。ShaderLab: SubShader にタグを割り当てる を参照してください。Pass ブロックを使用して、1 つまたは複数の Pass を定義します。ShaderLab: Pass の定義 を参照してください。| シグネチャ | 機能 | 
|---|---|
| SubShader{<optional: LOD><optional: tags><optional: commands><One or more Pass definitions>} | SubShader を定義します。 SubShader 内で数の制限なく Pass を定義することができます。 | 
このサンプルコードは、1 つの SubShader を含むシェーダーオブジェクトを作成するための構文を示しています。SubShader には 1 つの Pass が含まれます。
Shader "Examples/SinglePass"
{
    SubShader
    {
        Tags { "ExampleSubShaderTagKey" = "ExampleSubShaderTagValue" }
        LOD 100
         // SubShader 全体に適用される ShaderLab コマンドをここに記述
        Pass
        {                
              Name "ExamplePassName"
              Tags { "ExamplePassTagKey" = "ExamplePassTagValue" }
              // この Pass に適用される ShaderLab コマンドをここに記述
              // HLSL コードをここに記述
        }
    }
}