版本:Unity 6 (6000.0)
语言:英语
ShaderLab 中的 Shader 块参考
ShaderLab 中的 Fallback 块参考

ShaderLab 中的 Properties 块参考

本页介绍如何在您的 ShaderLabUnity 用于定义着色器对象结构的语言。 更多信息
参见 术语表
代码中使用 Properties 块来定义 着色器在 GPU 上运行的程序。 更多信息
参见 术语表
对象的材质属性。

渲染管线兼容性

功能名称 通用 渲染管线一系列将场景内容渲染到屏幕上的操作。Unity 允许您选择预构建的渲染管线,或编写自己的渲染管线。 更多信息
参见 术语表
(URP)
高清晰度渲染管线 (HDRP) 自定义 SRP 内置渲染管线
ShaderLab: Properties 块
在您的 HLSL 代码中,您必须将每个材质变量放入相同的 CBUFFER 中,以实现 SRP Batcher 兼容性。

在您的 HLSL 代码中,您必须将每个材质变量放入相同的 CBUFFER 中,以实现 SRP Batcher 兼容性。

在您的 HLSL 代码中,您必须将每个材质变量放入相同的 CBUFFER 中,以实现 SRP Batcher 兼容性。

语法

签名 函数
属性
{
    <材质属性声明>
    <材质属性声明>
}
将给定的属性保存为材质资产的一部分,并在渲染期间使用存储在材质资产中的值。
Properties 块可以包含任意数量的材质属性声明。

材质属性声明

所有材质属性声明都遵循以下基本格式

[optional: attribute] name("display text in Inspector", type name) = default value

确切的语法因类型而异。

本节介绍

按类型划分的材质属性声明语法

类型名称和默认值的语法取决于属性的类型。

在着色器代码中,通常以下划线字符开头所有属性名称。本页上的示例遵循此约定。

类型 示例语法 注释
整数 _ExampleName ("Integer display name", Integer) = 1 此类型由一个真正的整数支持(与下面介绍的旧版 Int 类型不同,该类型由一个浮点数支持)。当您想要使用整数时,请使用它来代替 Int。
Int (旧版) _ExampleName ("Int display name", Int) = 1 注意:此旧版类型由浮点数支持,而不是整数。出于向后兼容的原因才支持它。请改用 Integer 类型。
浮点数 _ExampleName ("Float display name", Float) = 0.5

_ExampleName ("Float with range", Range(0.0, 1.0)) = 0.5
范围滑块的最大值和最小值都是包含在内的。
Texture2D _ExampleName ("Texture2D display name", 2D) = "" {}

_ExampleName ("Texture2D display name", 2D) = "red" {}
在默认值字符串中放入以下值以使用 Unity 的内置纹理之一:“white” (RGBA: 1,1,1,1)、“black” (RGBA: 0,0,0,1)、“gray” (RGBA: 0.5,0.5,0.5,1)、“bump” (RGBA: 0.5,0.5,1,1) 或 “red” (RGBA: 1,0,0,1)。

如果您将字符串留空或输入无效值,则默认为“gray”。

注意:这些默认纹理在检查器中不可见。
Texture2DArray _ExampleName ("Texture2DArray display name", 2DArray) = "" {} 有关更多信息,请参见 纹理数组
Texture3D _ExampleName ("Texture3D", 3D) = "" {} 默认值为“gray” (RGBA: 0.5,0.5,0.5,1) 纹理。
立方体贴图六个方形纹理的集合,可以表示环境中的反射或几何体后面绘制的天空盒。六个正方形形成了围绕物体的一个假想立方体的面;每个面代表沿世界坐标轴方向(上、下、左、右、前和后)的视图。 更多信息
参见 术语表
_ExampleName ("Cubemap", Cube) = "" {} 默认值为“gray” (RGBA: 0.5,0.5,0.5,1) 纹理。
CubemapArray _ExampleName ("CubemapArray", CubeArray) = "" {} 参见 立方体贴图数组
颜色 _ExampleName("Example color", Color) = (.25, .5, .5, 1) 这映射到着色器代码中的 float4。

材质检查器显示颜色选择器。如果您希望将值编辑为四个单独的浮点数,请使用 Vector 类型。
矢量 _ExampleName ("Example vector", Vector) = (.25, .5, .5, 1) 这映射到着色器代码中的 float4。

材质检查器显示四个单独的浮点数字段。如果您希望使用颜色选择器来编辑值,请使用 Color 类型。

保留的材质属性名称

Unity 为材质属性保留了一些名称。当您使用其中一个名称创建材质属性时,Unity 会执行预定义的操作。除非您打算使用此功能,否则请不要使用这些名称。

名称 示例语法 函数
_TransparencyLM _TransparencyLM ("Transmissive Texture", 2D) = "white" {} 在光照贴图期间启用自定义 RGB 透明度。

有关更多信息,请参见 光照贴图和着色器

材质属性属性

材质属性声明可以有一个可选属性,告诉 Unity 如何处理它们。

除了这里列出的属性外,您还可以使用相同的语法将 MaterialPropertyDrawer 添加到材质属性。这使您可以控制材质属性在 检查器一个 Unity 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑值。 更多信息
参见 术语表
窗口中的显示方式。

属性 函数
[Gamma] 指示浮点数或向量属性使用 sRGB 值,这意味着如果项目的颜色空间需要,则必须与其他 sRGB 值一起进行转换。有关更多信息,请参见 着色器程序中的属性
[HDR] 指示纹理或颜色属性使用 高动态范围 (HDR) 值。

对于纹理属性,如果分配了 LDR 纹理,则 Unity 编辑器会显示警告。对于颜色属性,Unity 编辑器使用 HDR 颜色选择器来编辑此值。
[HideInInspector] 告诉 Unity 编辑器在检查器中隐藏此属性。
[MainTexture] 设置材质的主纹理,您可以使用 Material.mainTexture 访问它。

默认情况下,Unity 将属性名称为 _MainTex 的纹理视为主纹理。如果您的纹理具有不同的属性名称,但您希望 Unity 将其视为主纹理,请使用此属性。

如果您多次使用此属性,Unity 将使用第一个属性并忽略后续属性。

注意:当您使用此属性设置主纹理时,在使用纹理mipmap 流式传输调试视图模式或自定义调试工具时,纹理在游戏视图中不可见。
[MainColor] 设置材质的主颜色,您可以使用 Material.color 访问它。

默认情况下,Unity 将属性名称为 _Color 的颜色视为主颜色。如果您的颜色具有不同的属性名称,但您希望 Unity 将其视为主颜色,请使用此属性。如果您多次使用此属性,Unity 将使用第一个属性并忽略后续属性。
[NoScaleOffset] 告诉 Unity 编辑器隐藏此纹理属性的平铺和偏移字段。
[Normal] 指示纹理属性期望法线贴图。

如果您分配了不兼容的纹理,则 Unity 编辑器会显示警告。
[PerRendererData] 指示纹理属性将来自 MaterialPropertyBlock 形式的每个渲染器数据。

材质检查器显示这些属性为只读。

其他资源

ShaderLab 中的 Shader 块参考
ShaderLab 中的 Fallback 块参考