本页介绍如何在您的 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 形式的每个渲染器数据。 材质检查器显示这些属性为只读。 |