Version: 2023.2
言語: 日本語
ShaderLab: 名前をパスに割り当てる
ShaderLab: ビルトインレンダーパイプラインの定義済みパスタグ

ShaderLab: タグをパスに割り当てる

このページでは、ShaderLab コードで Tags ブロックを使用して Pass (パス) にタグを割り当てる方法について説明します。また、LightMode タグの使用に関する情報も含まれています。

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

概要

タグは、データのキーと値のペアで、パスに割り当てることができます。Unity は、事前定義されたタグと値を使用して、指定されたパスをいつどのように使用するかを決定します。または、カスタム値を使用して独自のカスタムのパスタグを作成することもできます。C# コードからパスタグにアクセスできます。

最もよく使われる定義済みのパスタグは、LightMode タグで、これはすべてのレンダーパイプラインで使用されます。その他のパスタグは、レンダーパイプラインによって異なります。詳しくは、以下のページを参照してください。

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

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

タグブロックの使用

ShaderLab でタグをパスに割り当てるには、Tags ブロックを Pass ブロックの中に配置します。

SubShader と Pass の両方が Tags ブロックを使用していますが、動作が異なることに注意してください。SubShader のタグを Pass に割り当てても効果はなく、その逆も同様です。その違いは以下に示すように、 Tags ブロックをどこに置くかによります。

  • パスタグを定義するには、Tags ブロックを、Pass ブロック内に配置します。
  • SubShader タグを定義するには、Tags ブロックを SubShader ブロック内に置き、かつ、Pass ブロックの外になるように配置します。

サブシェーダーへのタグの割り当てについては、サブシェーダーへのタグの割り当て を参照してください。

シグネチャ 機能
Tags {"<name1>" = "<value1>" "<name2>" = "<value2>"} 与えられたタグをパスに適用します。

タグは数に制限なく定義できます。

C# スクリプトでのパスタグの使用

C#スクリプトからパスタグの値にアクセスするには、Shader.FindPassTagValue API を使用します。これは Unity の定義済みのパスタグにも、自分で作成したカスタムのパスタグにも対応しています。

ノート: LightMode パスタグと直接連携する API がいくつかあります。詳細については、C# スクリプトによる LightMode タグの使用 を参照してください。

LightMode タグ

LightMode タグは定義済みのパスタグです。Unity が、あるフレーム中にパスを実行するかどうか、指定したフレーム内でいつ Unity がパスを実行するか、そして Unity が出力に対して何をするかを決定するために使用されます。

ノート: LightMode タグは、ライティングと関連する LightMode enum とは関係ありません。

すべてのレンダーパイプラインは、LightMode タグを使用しますが、定義済みの値とその意味は異なります。詳細については、構文と有効な値 を参照してください。

ビルトインレンダーパイプラインでは、LightMode タグを設定しない場合、Unity はライトや影なしでパスをレンダリングします。これは本質的に、LightMode の値を Always にすることと同じです。スクリプタブルレンダーパイプラインでは、SRPDefaultUnlit の値を使って、LightMode タグのないパスを参照できます。

構文と有効な値

シグネチャ 機能
“LightMode” = “[値]” このパスの LightMode 値を設定します。

このタグの有効な値は、レンダーパイプラインによって異なります。

C#スクリプトによる LightMode タグの使用

Material.SetShaderPassEnabledShaderTagId は、LightMode タグの値を使用して、Unity が与えられたパスをどのように処理するかを決定します。

スクリプタブルレンダーパイプラインでは、LightMode タグのカスタム値を作成することができます。次に、このカスタム値を使って、DrawingSettings 構造体を構成することにより、ScriptableRenderContext.DrawRenderers の指定した呼び出しの間に、どのパスを描画するかを決定できます。詳細とコード例については、カスタムレンダーパイプラインでのシンプルなレンダーループの作成 を参照してください。

Shader "Examples/ExampleLightMode"
{
    SubShader
    {
        Pass
        {    
              Tags { "LightMode" = "Always" }
            
              // パスを定義するコードの残りをここに記述。 here.
        }
    }
}
ShaderLab: 名前をパスに割り当てる
ShaderLab: ビルトインレンダーパイプラインの定義済みパスタグ