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 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.
機能名 | ビルトインレンダーパイプライン | ユニバーサルレンダーパイプライン (URP) | HD レンダーパイプライン (HDRP) | カスタム SRP |
---|---|---|---|---|
ShaderLab: Pass block | 可 | 可 | 可 | 可 |
To define a regular Pass in ShaderLab, you place a Pass
block inside a SubShader
block.
Inside the Pass
block, you can:
PackageRequirements
block. This makes Unity only run the Pass if the required packages are installed. See ShaderLab: specifying package requirements.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.
シグネチャ | 機能 |
---|---|
Pass { <optional: name> <optional: tags> <optional: commands> <optional: shader code> }
|
Defines a Pass. |
このサンプルコードは、1 つの SubShader を含むシェーダーオブジェクトを作成するための構文を示しています。SubShader には 1 つの Pass が含まれます。
Shader "Examples/SinglePass"
{
SubShader
{
Pass
{
Name "ExamplePassName"
Tags { "ExampleTagKey" = "ExampleTagValue" }
// ShaderLab commands go here.
// HLSL code goes here.
}
}
}