This page contains information on using a Tags
block in your ShaderLabUnity’s language for defining the structure of Shader objects. More info
See in Glossary code to assign tags to a Pass. It also contains information on using the LightMode
tag.
For information on how a ShaderA program that runs on the GPU. More info
See in Glossary object works, and the relationship between Shader objects, SubShaders and Passes, see Shader object fundamentals.
Tags are key-value pairs of data that you can assign to a Pass. Unity uses predefined tags and values to determine how and when to render a given Pass. You can also create your own custom Pass tags with custom values, and access them from C# code.
The most commonly used predefined Pass tag is the LightMode
tag; this is used in all render pipelines. Other Pass tags vary by render pipeline. For more information, see the following pages:
Feature name | Built-in Render Pipeline | Universal Render Pipeline (URP) | High Definition Render Pipeline (HDRP) | Custom SRP |
---|---|---|---|---|
ShaderLab: Pass Tags block | Yes | Yes | Yes | Yes |
ShaderLab: LightMode Pass tag | Yes | Yes | Yes | Yes |
To assign Tags to a Pass in ShaderLab, you place a Tags
block inside a Pass
block.
Note that both SubShaders and Passes use the Tags
block, but they work differently. Assigning SubShader tags to a Pass has no effect, and vice versa. The difference is where you put the Tags
block:
Tags
block inside a Pass
block.Tags
block inside a SubShader
block but outside a Pass
block.For information on assigning tags to a SubShader, see Assigning tags to a SubShader.
Signature | Function |
---|---|
Tags {"<name1>" = "<value1>" "<name2>" = "<value2>"} |
Applies the given tags to the Pass. You can define as many tags as you like. |
To access the value of a Pass tag from C# scriptsA piece of code that allows you to create your own Components, trigger game events, modify Component properties over time and respond to user input in any way you like. More info
See in Glossary, you can use the Shader.FindPassTagValue API. This works for Unity’s predefined Pass tags, and for custom Pass tags that you have created.
Note: There are several APIs that work directly with the LightMode Pass tag. For more information, see Using the LightMode tag with C# scripts.
The LightMode
tag is a predefined Pass tag that Unity uses to determine whether to execute the Pass during a given frame, when during the frame Unity executes the Pass, and what Unity does with the output.
Note: The LightMode
tag is not related to the LightMode enum, which relates to lighting.
Every render pipeline uses the LightMode
tag, but the predefined values and their meanings vary. For more information, see Syntax and valid values.
In the Built-in Render Pipeline, if you do not set a LightMode
tag, Unity renders the Pass without any lighting or shadows; this essentially the same as having a LightMode
value of Always
. In the Scriptable Render Pipeline, you can use the SRPDefaultUnlit
value to reference Passes without a LightMode tag.
Signature | Function |
---|---|
“LightMode” = “[value]” | Sets the LightMode value for this Pass. |
Valid values for this tag depend on the render pipeline.
Material.SetShaderPassEnabled and ShaderTagId use the value of the LightMode
tag to determine how Unity handles a given Pass.
In the Scriptable Render Pipeline, you can create custom values for the LightMode
tag. You can then use these custom values to determine which Passes to draw during a given call to ScriptableRenderContext.DrawRenderers, by configuring a DrawingSettings struct. For more information and a code example, see Creating a simple render loop in a custom Scriptable Render Pipeline.
Shader "Examples/ExampleLightMode"
{
SubShader
{
Pass
{
Tags { "LightMode" = "Always" }
// The rest of the code that defines the Pass goes here.
}
}
}