Version: Unity 6.0 (6000.0)
语言 : 中文
ShaderLab 中的 Shader 代码块参考
ShaderLab 中的 Fallback 代码块参考

ShaderLab 中的属性代码块参考

本页面包含针对在__ 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 的形式从逐渲染器数据得来。

材质检视面板将这些属性显示为只读。

其他资源

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