本页面包含有关如何使用着色器代码块的信息。有关编写 HLSL 本身的信息,请参阅在 Unity 中使用 HLSL。
| 功能 | 通用渲染管线 (URP) | 高清渲染管线 (HDRP) | 自定义可编程渲染管线 | 内置渲染管线 |
|---|---|---|---|---|
| HLSLPROGRAM | 是 | 是 | 是 | 是 |
| CGPROGRAM | 否 | 否 | 是 与使用 SRP Core 包的自定义渲染管线不兼容。 |
是 |
| 签名 | 功能 |
|---|---|
HLSLPROGRAM[source code for shader programs, written in HLSL]ENDHLSL
|
将 HLSL 着色器程序添加到包含此着色器程序块的 Pass 中。不包含 Unity 的内置着色器 include 文件。 |
CGPROGRAM[source code for shader programs, written in HLSL]ENDCG
|
将 HLSL 着色器程序添加到包含此着色器程序块的 Pass 中。默认情况下,包含几个 Unity 的内置着色器 include 文件,以便使用内置变量和函数。 |
| 功能 | 通用渲染管线 (URP) | 高清渲染管线 (HDRP) | 自定义可编程渲染管线 | 内置渲染管线 |
|---|---|---|---|---|
| HLSLINCLUDE | 是 | 是 | 是 | 是 |
| CGINCLUDE | 否 | 否 | 是 与使用 SRP Core 包的自定义渲染管线不兼容。 |
是 |
| 签名 | 功能 |
|---|---|
HLSLINCLUDE[HLSL code that you want to share]ENDHLSL
|
Unity 将此代码包含在 HLSLPROGRAM 块中定义的所有着色器程序中,可位于此源文件的任何位置。 |
CGINCLUDE[HLSL code that you want to share]ENDCG
|
Unity 将此代码包含在 CGPROGRAM 块中定义的所有着色器程序中,可位于此源文件的任何位置。 |
以 HLSL 或 CG 为前缀的块之间的区别是:
CG 为前缀的着色器代码块较旧。默认情况下,它们包含几个 Unity 的内置着色器 include 文件,如果您需要此功能,这会很方便。内置 include 文件仅与内置渲染管线兼容。HLSL 为前缀的着色器代码块较新。默认情况下,它们不包含 Unity 的内置着色器 include 文件,因此您必须将要使用的任何库代码手动包含进来。它们适用于任何渲染管线。有关 Unity 内置着色器 include 文件的信息,请参阅内置着色器 include 文件。
以 PROGRAM 或 INCLUDE 为后缀的块之间的区别是:
PROGRAM 为后缀的着色器代码块被称为着色器程序块。可以使用它们来编写着色器程序。在这些块中编写好 HLSL 着色器代码后,将它们放在__ ShaderLab__Unity 用于定义着色器对象结构的语言。更多信息INCLUDE 为后缀的着色器代码块被称为着色器 include 块。可以使用它们在同一源文件中的着色器程序块之间共享公共代码。编写好要在这些块中共享的 HLSL 着色器代码后,将它们放置在 ShaderLab 代码中的 Pass、SubShader 或 Shader 块中。它的工作方式与在 HLSL 代码中使用 include 的方式类似。