Version: 6000.3
语言: 中文
ShaderLab 参考中的 Shader 块
ShaderLab 参考中的 Fallback 块

ShaderLab中的属性块引用

此页面包含有关使用PropertiesShaderLabUnity 用于定义 Shader 对象结构的语言。更多信息
请参阅术语表
定义材料属性的代码着色器在 GPU 上运行的程序。更多信息
请参阅术语表
对象。

渲染管线兼容性

功能名称 普遍渲染管线(Render Pipeline) 获取场景内容并将其显示在屏幕上的一系列作。Unity 允许您从预构建的渲染管道中进行选择,或编写自己的渲染管道。更多信息
请参阅术语表
(URP)
高清渲染管线 (HDRP) 定制 SRP 内置渲染管线
ShaderLab:属性块 是 在 HLSL 代码
中,必须将每个材质的变量放在相同的
CBUFFER用于 SRP Batcher 兼容性。
是 在 HLSL 代码
中,必须将每个材质的变量放在相同的
CBUFFER用于 SRP Batcher 兼容性。
是 在 HLSL 代码
中,必须将每个材质的变量放在相同的
CBUFFER用于 SRP Batcher 兼容性。
是的

语法

签名 功能
Properties
{
    <Material property declaration>
    <Material property declaration>
}
将给定属性保存为材质资源的一部分,并在渲染期间使用存储在材质资源中的值。
一个
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 注意:此旧类型由浮点数而不是整数支持。仅出于向后兼容性原因,支持它。使用Integertype 代替。
_ExampleName ("Float display name", Float) = 0.5

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

_ExampleName ("Texture2D display name", 2D) = "red" {}
在默认值字符串中输入以下值以使用 Unity 的内置纹理之一:“白色”(RGBA:1,1,1),“黑色”(RGBA:0,0,0,1),“灰色”(RGBA:0.5,0.5,0.5,1),“凹凸”(RGBA:0.5,0.5,1,1)或“红色”(RGBA:1,0,0,1)。

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

注意:这些默认纹理在检查器中不可见。
纹理2DArray _ExampleName ("Texture2DArray display name", 2DArray) = "" {} 有关详细信息,请参阅纹理数组
纹理3D _ExampleName ("Texture3D", 3D) = "" {} 默认值为“灰色”(RGBA:0.5,0.5,0.5,1)纹理。
立方体贴图(Cubemap) 六个方形纹理的集合,可以表示环境中的反射或几何体后面绘制的天空盒。这六个正方形形成了一个围绕物体的假想立方体的面;每个面表示沿世界轴方向(上、下、左、右、前和后)的视图。更多信息
请参阅术语表
_ExampleName ("Cubemap", Cube) = "" {} 默认值为“灰色”(RGBA:0.5,0.5,0.5,1)纹理。
立方体贴图数组 _ExampleName ("CubemapArray", CubeArray) = "" {} 请参阅立方体贴图数组
颜色 _ExampleName("Example color", Color) = (.25, .5, .5, 1) 这映射到着色器代码中的 float4。
材质检查器
显示一个颜色选取器。如果希望将值编辑为四个单独的浮点数,请使用 Vector 类型。
向量 _ExampleName ("Example vector", Vector) = (.25, .5, .5, 1) 这映射到着色器代码中的 float4。
材质检查器
显示四个单独的浮点字段。如果希望使用颜色选择器编辑值,请使用颜色类型。

保留材质属性名称

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

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

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

材质属性属性

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

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

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

对于纹理属性,如果分配了 LDR 纹理,Unity 编辑器会显示警告。对于颜色属性,Unity 编辑器使用 HDR 颜色选择器来编辑此值。
[HideInInspector] 告诉 Unity 编辑器在 Inspector 中隐藏此属性。
[MainTexture] 设置材质的主纹理,你可以使用 Material.mainTexture 访问该纹理。
默认
情况下,Unity 会考虑属性名称为 name
_MainTex作为主要纹理。如果您的纹理具有不同的属性名称,但您希望 Unity 将其视为主纹理,请使用此属性。

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

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

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

如果分配了不兼容的纹理,Unity 编辑器会显示警告。
[PerRendererData] 指示纹理属性将以 MaterialPropertyBlock 的形式来自每个渲染器的数据。
材质检查器
将这些属性显示为只读。

其他资源

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