To define a Pass in ShaderLabUnity’s language for defining the structure of Shader objects. More info
See in Glossary, use a Pass block. This page contains information on using Pass blocks. 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.
A Pass is the fundamental element of a Shader object. It contains instructions for setting the state of the GPU, and the shader programs that run on the GPU.
Simple Shader objects might contain only a single Pass, but more complex shaders can contain multiple Passes. You can use separate Passes to define parts of your Shader object that work differently; for example, parts that require a change to the render state, different shader programs, or a different LightMode Pass tag.
Note: In render pipelines based on the Scriptable Render Pipeline, you can use a RenderStateBlock to change the render state on the GPU, without requiring a separate Pass.
| Feature name | Built-in Render Pipeline | Universal Render Pipeline (URP) | High Definition Render Pipeline (HDRP) | Custom SRP |
|---|---|---|---|---|
| ShaderLab: Pass block | Yes | Yes | Yes | Yes |
To define a regular Pass in ShaderLab, you place a Pass block inside a SubShader block.
Inside the Pass block, you can:
You can also define two special types of Pass, using the UsePass or GrabPass commands. For information on those commands, see ShaderLab commands: UsePass or ShaderLab commands: GrabPass.
| Signature | Function |
|---|---|
Pass{<optional: name><optional: tags><optional: commands><optional: shader code>}
|
Defines a Pass. |
This example code demonstrates the syntax for creating a Shader object that contains a single SubShader, which in turn contains a single Pass.
Shader "Examples/SinglePass"
{
SubShader
{
Pass
{
Name "ExamplePassName"
Tags { "ExampleTagKey" = "ExampleTagValue" }
// ShaderLab commands go here.
// HLSL code goes here.
}
}
}