Version: Unity 6.0 (6000.0)
语言 : 中文
为着色器添加材质属性
添加材质属性

材质属性简介

__ ShaderLab__Unity 用于定义着色器对象结构的语言。更多信息
See in Glossary
代码中,可以定义材质属性。材质属性是 Unity 作为材质资源一部分存储的属性。它使美术师可以创建、编辑和共享具有不同配置的材质。

如果使用材质属性:

  • 可以通过对材质调用函数(例如 Material.SetFloat)来获取或设置 Shader 对象中的变量值。
  • 可以使用材质检视面板 (Inspector) 查看和编辑值。
  • Unity 会将做出的更改保存为材质资源的一部分,因此它们可在会话之间持续存在。

如果不使用材质属性:

  • 仍可以通过对材质调用函数来获取或设置 Shader 对象中的变量值。
  • 这些值没有可视化编辑器。
  • 更改不会在会话之间持续存在。

通常_不_需要创建材质属性的情况仅限:如果要完全使用脚本设置着色器属性值(例如,如果在制作程序化内容)、如果无法将属性设为材质属性或者如果不希望在检视面板中编辑它们。

如何向着色器提供属性值

在下列位置中查找着色器属性值并提供给着色器:

  • MaterialPropertyBlock 中设置的每渲染器值。这通常是“每实例”数据(例如,全部共享相同材质的许多对象的自定义着色颜色)。
  • 在渲染的对象上使用的材质中设置的值。
  • 全局着色器属性,通过 Unity 渲染代码自身设置(请参阅内置着色器变量),或通过您自己的脚本来设置(例如 Shader.SetGlobalTexture)。

优先顺序如上所述:每实例数据覆盖所有内容;然后使用材质数据;最后,如果这两个地方不存在着色器属性,则使用全局属性值。最终,如果在任何地方都没有定义着色器属性值,则将提供“默认值”(浮点数的默认值为零,颜色的默认值为黑色,纹理的默认值为空的白色纹理)。

序列化和运行时材质属性

材质可以同时包含序列化的属性值和运行时设置的属性值。

序列化的数据是在着色器的 Properties 代码块中定义的所有属性。通常,这些是需要存储在材质中的值,并且可由用户在材质检视面板中进行调整。

材质也可以具有着色器使用的一些属性,但不在着色器的 Properties 代码块中声明。通常,这适用于在运行时从脚本代码(例如,通过 Material.SetColor)设置的属性。请注意,矩阵和数组只能作为非序列化的运行时属性存在(因为无法在 Properties 代码块中定义它们)。

为着色器添加材质属性
添加材质属性