Version: 6000.3
语言: 中文
在代码中编写着色器简介
在 ShaderLab 和 HLSL 中编写自定义着色器

着色器对象基础知识

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

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

渲染管线兼容性

功能名称 普遍渲染管线(Render Pipeline) 获取场景内容并将其显示在屏幕上的一系列作。Unity 允许您从预构建的渲染管道中进行选择,或编写自己的渲染管道。更多信息
请参阅术语表
(URP)
高清渲染管线 (HDRP) 定制 SRP 内置渲染管线
着色器对象 是的 是的 是的 是的

Shader 对象

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

将 Shader 对象与materials(材质) 定义表面应如何渲染的资产。更多信息
请参阅术语表
以确定您的外观场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
请参阅术语表
.

资产

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

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

在着色器对象内部

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

Shader 对象

Shader 对象包含:

  • 有关其自身的信息,例如其名称
  • 一个可选的回退 Shader 对象,如果 Unity 无法使用此对象,则使用该对象
  • 一个或多个子着色器

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

子着色器

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

子着色器包含:

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

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

通过

通行证包含:

  • Pass 标签,它们是提供有关 Pass 的信息的键值对
  • 在运行着色器程序之前更新呈现状态的说明
  • 着色器程序,组织成一个或多个着色器变体

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

着色器变体

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

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

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

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