このページでは、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
ブロック内に配置します。Tags
ブロックを SubShader
ブロック内に置き、かつ、Pass
ブロックの外になるように配置します。サブシェーダーへのタグの割り当てについては、サブシェーダーへのタグの割り当て を参照してください。
シグネチャ | 機能 |
---|---|
Tags {"<name1>" = "<value1>" "<name2>" = "<value2>"} |
与えられたタグをパスに適用します。 タグは数に制限なく定義できます。 |
C#スクリプトからパスタグの値にアクセスするには、Shader.FindPassTagValue API を使用します。これは Unity の定義済みのパスタグにも、自分で作成したカスタムのパスタグにも対応しています。
ノート: LightMode パスタグと直接連携する API がいくつかあります。詳細については、C# スクリプトによる LightMode タグの使用 を参照してください。
LightMode
タグは定義済みのパスタグです。Unity が、あるフレーム中にパスを実行するかどうか、指定したフレーム内でいつ Unity がパスを実行するか、そして Unity が出力に対して何をするかを決定するために使用されます。
ノート: LightMode
タグは、ライティングと関連する LightMode enum とは関係ありません。
すべてのレンダーパイプラインは、LightMode
タグを使用しますが、定義済みの値とその意味は異なります。詳細については、構文と有効な値 を参照してください。
ビルトインレンダーパイプラインでは、LightMode
タグを設定しない場合、Unity はライトや影なしでパスをレンダリングします。これは本質的に、LightMode
の値を Always
にすることと同じです。スクリプタブルレンダーパイプラインでは、SRPDefaultUnlit
の値を使って、LightMode タグのないパスを参照できます。
シグネチャ | 機能 |
---|---|
“LightMode” = “[値]” | このパスの LightMode 値を設定します。 |
このタグの有効な値は、レンダーパイプラインによって異なります。
Material.SetShaderPassEnabled とShaderTagId は、LightMode
タグの値を使用して、Unity が与えられたパスをどのように処理するかを決定します。
スクリプタブルレンダーパイプラインでは、LightMode
タグのカスタム値を作成することができます。次に、このカスタム値を使って、DrawingSettings 構造体を構成することにより、ScriptableRenderContext.DrawRenderers の指定した呼び出しの間に、どのパスを描画するかを決定できます。詳細とコード例については、カスタムレンダーパイプラインでのシンプルなレンダーループの作成 を参照してください。
Shader "Examples/ExampleLightMode"
{
SubShader
{
Pass
{
Tags { "LightMode" = "Always" }
// パスを定義するコードの残りをここに記述。 here.
}
}
}
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.