版本:Unity 6 (6000.0)
语言:英语
ShaderLab 参考中的 Pass 标签
ShaderLab 参考中的 GPU 渲染状态命令

ShaderLab 参考中的着色器代码块

本页包含有关使用 着色器在 GPU 上运行的程序。 更多信息
参见 词汇表
代码块的信息。有关编写 HLSL 本身的详细信息,请参见 在 Unity 中使用 HLSL

HLSLPROGRAM 和 CGPROGRAM

渲染管线兼容性

功能 通用 渲染管线一系列将场景内容渲染到屏幕上的操作。Unity 允许您从预构建的渲染管线中选择,或者编写自己的。 更多信息
参见 词汇表
(URP)
高清渲染管线 (HDRP) 自定义可脚本化渲染管线 内置渲染管线
HLSLPROGRAM
CGPROGRAM

与使用 SRP Core 包的自定义渲染管线不兼容。

语法

签名 函数
HLSLPROGRAM
    [着色器程序的源代码,用 HLSL 编写]
ENDHLSL
将 HLSL 着色器程序添加到包含此着色器程序块的 Pass 中。不包含 Unity 的内置着色器包含文件。
CGPROGRAM
    [着色器程序的源代码,用 HLSL 编写]
ENDCG
将 HLSL 着色器程序添加到包含此着色器程序块的 Pass 中。默认情况下包含 Unity 的几个 内置着色器包含文件,使您可以使用内置变量和函数。

HLSLINCLUDE 和 CGINCLUDE

功能 通用渲染管线 (URP) 高清渲染管线 (HDRP) 自定义可脚本化渲染管线 内置渲染管线
HLSLINCLUDE
CGINCLUDE

与使用 SRP Core 包的自定义渲染管线不兼容。

语法

签名 函数
HLSLINCLUDE
    [您要共享的 HLSL 代码]
ENDHLSL
Unity 将此代码包含在所有在 HLSLPROGRAM 块中定义的着色器程序中,位于此源文件的任何位置。
CGINCLUDE
    [您要共享的 HLSL 代码]
ENDCG
Unity 将此代码包含在所有在 CGPROGRAM 块中定义的着色器程序中,位于此源文件的任何位置。

HLSL 和 CG 前缀

HLSLCG 开头的块之间的区别在于

  • CG 为前缀的着色器代码块较旧。默认情况下,它们包含 Unity 的几个 内置着色器包含文件,如果您需要此功能,这可能很方便。内置包含仅与内置渲染管线兼容。
  • HLSL 为前缀的着色器代码块较新。默认情况下,它们不包含 Unity 的内置着色器包含文件,因此您必须手动包含要使用的任何库代码。它们适合与任何渲染管线一起使用。

有关 Unity 的内置着色器包含文件的详细信息,请参见 内置着色器包含文件

PROGRAM 和 INCLUDE 后缀

PROGRAMINCLUDE 结尾的块之间的区别在于

  • PROGRAM 结尾的着色器代码块称为 着色器程序块。您使用它们编写着色器程序。您在这些块中编写 HLSL 着色器代码,然后将它们放在 ShaderLabUnity 用于定义着色器对象结构的语言。 更多信息
    参见 词汇表
    代码中的 Pass 块中。
  • INCLUDE 结尾的着色器代码块称为 着色器包含块。您使用它们在同一源文件中的着色器程序块之间共享公共代码。您在这些块中编写要共享的 HLSL 着色器代码,然后将它们放在 ShaderLab 代码中的 Pass、SubShader 或 Shader 块中。它的工作方式类似于在 HLSL 代码中使用包含。

其他资源

ShaderLab 参考中的 Pass 标签
ShaderLab 参考中的 GPU 渲染状态命令