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 の定義 を参照してください。PackageRequirements
ブロックを使用してパッケージ要件を指定します。これにより、Unity は必要なパッケージがインストールされている場合にのみ SubShader を実行します。ShaderLab: パッケージ要件の指定 を参照してください。シグネチャ | 機能 |
---|---|
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 コードをここに記述
}
}
}