Version: 2020.3
Language : English
ShaderLab: assigning a LOD value to a SubShader
ShaderLab: assigning a name to a Pass

ShaderLab: defining a Pass

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.

Overview

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.

Render pipeline compatibility

Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP
ShaderLab: Pass block Yes Yes Yes Yes

Using the Pass block

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.

Examples

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.
        }
    }
}
ShaderLab: assigning a LOD value to a SubShader
ShaderLab: assigning a name to a Pass