Version: 2021.3
言語: 日本語
ShaderLab: カスタムエディターの割り当て
ShaderLab: タグを SubShader に割り当てる

ShaderLab: SubShader の定義

ShaderLab で SubShader を定義するには、SubShader ブロックを使用します。このページでは、SubShader ブロックの使用について説明します。

シェーダーオブジェクトの仕組みや、シェーダーオブジェクト、SubShader、Pass の関係については、シェーダーオブジェクトの基礎 を参照してください。

概要

シェーダーオブジェクトには、1 つまたは複数の SubShader が含まれます。SubShader により、異なるハードウェア、レンダリングパイプライン、ランタイム設定に応じて、異なる GPU 設定とシェーダプログラムを定義することができます。シェーダーオブジェクトには 1 つの SubShader しか含まれていないものもあれば、さまざまな構成をサポートするために複数の SubShader を含むものもあります。

レンダーパイプラインの互換性

機能名 ビルトインレンダーパイプライン ユニバーサルレンダーパイプライン (URP) HD レンダーパイプライン (HDRP) カスタム SRP
ShaderLab:サブシェイダーブロック あり あり あり あり

SubShader ブロックの使用

ShaderLab では、SubShader ブロックを Shader ブロック内に配置して SubShader を定義します。

SubShader ブロック内で、以下を行うことができます。

  • LOD ブロックを使って、LOD 値を SubShader に割り当てます。LOD を SubShader に割り当てる を参照してください
  • Tags ブロックを使用して、データのキーと値のペアを SubShader に割り当てます。ShaderLab: SubShader にタグを割り当てる を参照してください。
  • ShaderLab コマンドを使用して、GPU 命令またはシェーダーコードを SubShader に加えます。ShaderLab: コマンドの使用 を参照してください。
  • 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 コードをここに記述
        }
    }
}
ShaderLab: カスタムエディターの割り当て
ShaderLab: タグを SubShader に割り当てる