要使用 ShaderLab 定义子着色器,可以使用 SubShader
代码块。本页面包含有关使用 SubShader 代码块的信息。
有关 Shader 对象的工作原理以及 Shader 对象、子着色器与通道之间关系的信息,请参阅 Shader 对象简介。
Shader 对象包含一个或多个 SubShader。通过 SubShader 您可以为不同的硬件、渲染管线和运行时设置定义不同的 GPU 设置和着色器程序。某些 Shader 对象只包含一个 SubShader;另一些包含多个 SubShader 以支持一系列不同的配置。
功能名称 | 内置渲染管线 | 通用渲染管线 (URP) | 高清渲染管线 (HDRP) | 自定义 SRP |
---|---|---|---|---|
ShaderLab:SubShader 代码块 | 是 | 是 | 是 | 是 |
在 ShaderLab 中,通过将 SubShader
代码块置于 Shader
代码块中,可以定义子着色器。
在 SubShader
代码块中,可以:
LOD
代码块为 SubShader 分配 LOD(细节级别)值。参阅向 SubShader 分配 LOD 值。Tags
代码块将数据的键值对分配给子着色器。参阅 ShaderLab:向子着色器分配标签。Pass
代码块定义一个或多个通道。参阅 ShaderLab:定义通道。PackageRequirements
block. This makes Unity only run the SubShader if the required packages are installed. See ShaderLab: specifying package requirements.签名 | 功能 |
---|---|
SubShader { <optional: LOD> <optional: tags> <optional: commands> <One or more Pass definitions> }
|
定义子着色器。 您可以在子着色器中定义任意数量的通道。 |
此示例代码演示了用于创建包含单个子着色器的 Shader 对象的语法,而每个子着色器又包含一个通道。
Shader "Examples/SinglePass"
{
SubShader
{
Tags { "ExampleSubShaderTagKey" = "ExampleSubShaderTagValue" }
LOD 100
// 此处是应用于整个子着色器的 ShaderLab 命令。
Pass
{
Name "ExamplePassName"
Tags { "ExamplePassTagKey" = "ExamplePassTagValue" }
// 此处是应用于此通道的 ShaderLab 命令。
// 此处是 HLSL 代码。
}
}
}