版本:Unity 6 (6000.0)
语言:英语
在代码中编写着色器的介绍
在 ShaderLab 和 HLSL 中编写自定义着色器

着色器对象基础

在 Unity 中,当您使用作为 图形管道 一部分的着色器时,通常使用 Shader在 GPU 上运行的程序。 更多信息
术语表 中查看
类实例。Shader 类实例称为 **着色器对象**。

着色器对象是 Unity 特有的使用着色器程序的方式;它是一个包装器,包含着色器程序和其他信息。它允许您在同一个文件中定义多个着色器程序,并告诉 Unity 如何使用它们。

渲染管线兼容性

功能名称 通用 渲染管线将场景内容显示到屏幕上的一系列操作。Unity 允许您从预构建的渲染管线中选择,也可以编写自己的渲染管线。 更多信息
术语表 中查看
(URP)
高精度渲染管线 (HDRP) 自定义 SRP 内置渲染管线
着色器对象

着色器对象

着色器对象包含着色器程序、更改 GPU 上设置的指令(统称为渲染状态)以及告诉 Unity 如何使用它们的信息。

您可以将着色器对象与 材质定义表面渲染方式的资源。 更多信息
术语表 中查看
结合使用,以确定 场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的游戏关卡。在每个场景中,您放置环境、障碍物和装饰,本质上是分块设计和构建您的游戏。 更多信息
术语表 中查看
的外观。

资源

您可以通过两种方式创建着色器对象。每种方式都有其自己的资源类型。

无论您以哪种方式创建着色器对象,Unity 在内部以相同的方式表示结果。

着色器对象内部

着色器对象具有嵌套结构。它将信息组织到称为 **子着色器** 和 **通道** 的结构中。它将着色器程序组织到 **着色器变体** 中。

着色器对象

着色器对象包含

  • 关于它本身的信息,例如它的名称
  • 一个可选的回退着色器对象,如果 Unity 不能使用当前对象,它会使用这个对象
  • 一个或多个子着色器

您还可以定义其他信息,例如共享着色器代码,或是否使用 自定义编辑器。有关定义着色器对象的信息,请参见 ShaderLab:定义着色器对象

子着色器

子着色器允许您将着色器对象分成与不同硬件、渲染管线和运行时设置兼容的部分。

子着色器包含

  • 关于此子着色器与哪些硬件、渲染管线和运行时设置兼容的信息
  • 子着色器标签,它们是提供有关子着色器的信息的键值对
  • 一个或多个通道

您还可以定义其他信息,例如对所有通道通用的渲染状态。有关您可以在子着色器中定义的所有内容的信息,请参见 ShaderLab:定义子着色器

通道

通道包含

  • 通道标签,它们是提供有关通道的信息的键值对
  • 在运行其着色器程序之前更新渲染状态的指令
  • 着色器程序,组织成一个或多个着色器变体

您还可以定义其他信息,例如名称。有关您可以在通道中定义的所有内容的信息,请参见 ShaderLab:定义通道

着色器变体

通道包含的着色器程序被组织成着色器变体。着色器变体共享公共代码,但在启用或禁用特定关键字时具有不同的功能。

通道中的着色器变体数量取决于您在着色器代码中定义的关键字数量和目标平台。每个通道至少包含一个变体。

有关更多信息,请参见 着色器变体根据特定着色器关键字组合及其状态而生成的着色器程序版本。着色器对象可以包含多个着色器变体。 更多信息
术语表 中查看

在代码中编写着色器的介绍
在 ShaderLab 和 HLSL 中编写自定义着色器