本页面包含针对在__ ShaderLab__Unity 用于定义着色器对象结构的语言。更多信息
See in Glossary 代码中使用 Properties 代码块为着色器对象定义材质属性的信息。
| 功能名称 | 通用渲染管线 (URP) | 高清渲染管线 (HDRP) | 自定义 SRP | 内置渲染管线 |
|---|---|---|---|---|
| ShaderLab:Properties 代码块 | 是 在 HLSL 代码中,为实现 SRP 批处理程序的兼容性,您必须将逐材质的变量放置于同一个 CBUFFER 中。 |
是 在 HLSL 代码中,为实现 SRP 批处理程序的兼容性,您必须将逐材质的变量放置于同一个 CBUFFER 中。 |
是 在 HLSL 代码中,为实现 SRP 批处理程序的兼容性,您必须将逐材质的变量放置于同一个 CBUFFER 中。 |
是 |
| 签名 | 功能 |
|---|---|
Properties{<Material property declaration><Material property declaration>}
|
将给定属性保存为材质资产的一部分,并在渲染期间使用存储在材质资产中的值。Properties 代码块可以包含任意数量的材质属性声明。 |
所有材质属性声明都遵循以下基本格式:
[optional: attribute] name("display text in Inspector", type name) = default value
具体的语法因类型而异。
本节包含以下相关信息:
类型名称和默认值的语法取决于属性的类型。
在着色器代码中,通常所有属性名称都以下划线字符开头。本页面上的示例将遵循此规范。
| 类型 | 示例语法 | 注释 |
|---|---|---|
| Integer | _ExampleName ("Integer display name", Integer) = 1 |
此类型由实际的整数支持(与下面描述的旧版 Int 类型不同,旧版类型由浮点数支持)。要使用整数时,请使用此属性而不是 Int。 |
| Int(旧版) | _ExampleName ("Int display name", Int) = 1 |
注意:此旧版类型由浮点数而不是整数支持。仅为向下兼容而提供支持。请改用 Integer 类型。 |
| Float |
_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) 纹理。 |
| Cubemap | _ExampleName ("Cubemap", Cube) = "" {} |
默认值为 “gray”(RGBA:0.5,0.5,0.5,1) 纹理。 |
| CubemapArray | _ExampleName ("CubemapArray", CubeArray) = "" {} |
见立方体贴图数组。 |
| Color | _ExampleName("Example color", Color) = (.25, .5, .5, 1) |
映射着色器代码中的 float4。 材质检视面板会显示拾色器。如果更希望将值编辑为四个单独的浮点数,请使用 Vector 类型。 |
| Vector | _ExampleName ("Example vector", Vector) = (.25, .5, .5, 1) |
映射着色器代码中的 float4。 材质检视面板会显示四个单独的浮点字段。如果希望使用拾色器编辑数组,请使用 Color 类型。 |
Unity 为材质属性预留了一些名称。创建具有这些名称之一的材质属性时,Unity 会执行预定义的操作。除非打算使用此功能,否则请勿使用这些名称。
| 名称 | 示例语法 | 功能 |
|---|---|---|
| _TransparencyLM | _TransparencyLM ("Transmissive Texture", 2D) = "white" {} |
在光照贴图期间启用自定义 RGB 透明度。 详情请参阅光照贴图和着色器。 |
材质属性 (property) 声明可以具有一个可选特性 (attribute),从而告知 Unity 该如何处理它们。
除了此处列出的特性外,您还可以使用相同语法向材质属性添加 MaterialPropertyDrawer。这可以让您控制材质属性在检视面板窗口中的显示方式。
| 特性 | 功能 |
|---|---|
[Gamma] |
表示浮点数或矢量属性使用了 sRGB 值,这意味着如果项目中的颜色空间需要,则它必须与其他 sRGB 值一起转换。详情请参阅着色器程序中的属性。 |
[HDR] |
表示纹理或颜色属性使用了高动态范围 (HDR) 值。 针对纹理属性,如果分配了 LDR 纹理,则 Unity 编辑器会显示警告。针对颜色属性,Unity 编辑器会使用 HDR 拾色器编辑此值。 |
[HideInInspector] |
让 Unity 编辑器在检视面板中隐藏此属性。 |
[MainTexture] |
为材质设置主纹理,可以通过 Material.mainTexture 进行访问。 Unity 默认会将属性 (property) 名为 _MainTex 的纹理视为主纹理。如果您的纹理具有其他属性 (property) 名称,但您希望 Unity 将此纹理视为主纹理,请使用此特性 (attribute)。如果您多次使用此特性 (attribute),则 Unity 会使用第一个属性 (property),而忽略后续属性 (property)。 注意:使用此属性设置主纹理时,使用纹理 Mipmap 流送调试视图模式或自定义调试工具时,该纹理在游戏视图中不可见。 |
[MainColor] |
为材质设置主色,可以通过 Material.color 进行访问。 Unity 默认会将属性 (property) 名为 _Color 的颜色视为主色。如果您的颜色具有其他属性 (property) 名,但您希望 Unity 将此颜色视为主色,请使用此特性 (attribute)。如果您多次使用此特性 (attribute),则 Unity 会使用第一个属性 (property),而忽略后续属性 (property)。 |
[NoScaleOffset] |
让 Unity 编辑器隐藏此纹理属性的平铺和偏移字段。 |
[Normal] |
表示纹理属性需要法线贴图。 如果分配了不兼容的纹理,Unity 编辑器会显示警告。 |
[PerRendererData] |
表示纹理属性会以 MaterialPropertyBlock 的形式从逐渲染器数据得来。 材质检视面板将这些属性显示为只读。 |