Version: 2021.1
ShaderLab: assigning a LOD value to a SubShader
ShaderLab: assigning a name to a Pass

ShaderLab: defining a Pass

To define a Pass in ShaderLab, use a Pass block. This page contains information on using Pass blocks. For information on how a Shader 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 Unity can shaders 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) 高清渲染管线 (HDRP) Custom SRP
ShaderLab: Pass block

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