Skip to content

格式

c++
#pragma property [PTYPE] [NAME] [DVALUE]

描述

执行该命令用于指定 着色器(Shader)中支持的 材质属性(Property),材质属性是可用于着色器内的变量,也可在编辑器上通过引用了该 着色器(Shader)的 材质(Material)进行访问。

【Shader_Common_property000.png】

在着色器中编辑的材质属性以及在 检视窗口(Inspector)查看引用了对应着色器的材质的对应关系。

字段

字段名是否必须字段值描述
[PTYPE]float 定义该 材质属性(Property)为浮点型。
int 定义该 材质属性(Property)为整型。
range(Min,Max) 定义该 材质属性(Property)为范围类型,特指浮点型的范围类型。 其中:
· Min 指的是该范围的最小值,在编辑命令时需要写上具体数值。
· Max 指的是该范围的最大值,在编辑命令时需要写上具体数值。
color 定义该 材质属性(Property)为四维颜色类型(rgba)。
vector 定义该 材质属性(Property)为 vec4 (四维向量)类型。值得注意的是,vec2,vec3,vec4 类型的 材质属性(Property)均需使用 vector。
matrix 定义该 材质属性(Property)为 mat4 (4*4 的矩阵)类型。值得注意的是,mat2,mat3,mat4 类型的 材质属性(Property)均需使用 matrix。
texture2D 定义该 材质属性(Property)为 2D 纹理类型,可用于引用 2D 纹理(Texture 2D)。
cubeMap 定义该 材质属性(Property)为立方体贴图类型,可用于引用 立方体贴图(Cubemap)。
[NAME] < 自定义属性名 > 该字段用于给 材质属性(Property)命名。值得注意的是,材质属性(Property)的命名不能与 Uniform 重名,具体需要规避的 Uniform 命名请参阅 内置全局 Uniform 章节。
[DVALUE] < 自定义初始值 > 根据 [PTYPE] 字段的类型定义该 材质属性(Property)的初始值,如果不编辑,则根据 [PTYPE] 字段的类型定义为默认值,其中:
· float 类型的默认值是 0.0。
· int 类型的默认值是 0。
· range 类型的默认值是 0.0。
· color 类型的默认值是 (1.0, 1.0, 1.0, 1.0) ,即为白色。
· vector 类型的默认值是 (0.0, 0.0, 0.0, 0.0)。
· matrix 类型的默认值是 mat4(1.0),即为对角线上的值为 1 其他值为 0 的 4*4 矩阵。
· texture2D 类型的默认值是纯白色 2D 纹理,且该类型暂时不支持指定任何初始值。
· cubeMap 类型的默认值是纯白色立方体贴图,且该类型暂时不支持指定任何初始值。

代码示例

为方便您的理解,代码示例中的所有 材质属性(Property)都采用 _a, _b, _c 和 _d 的方式命名。

float 类型材质属性

c++
#pragma property float _a
#pragma property float _b 0.5
#pragma property float _c 100.0

在 材质(Material)中显示效果:

【Shader_Common_property001.png】

int 类型材质属性

c++
#pragma property float _a
#pragma property float _b 100
#pragma property float _c -33

在 材质(Material)中显示效果:

【Shader_Common_property002.png】

range 类型材质属性

c++
#pragma property range(-10,10) _a
#pragma property range(0,1) _b 0.5
#pragma property range(-10,10) _c 5.0

在 材质(Material)中显示效果:

【Shader_Common_property003.png】

color 类型材质属性

c++
#pragma property color _a
#pragma property color _b (1.0,0.3,0.3,0.2)
#pragma property color _c (1.0,0.5,0.0)
#pragma property color _d (0.9)

在 材质(Material)中显示效果:

【Shader_Common_property004.png】

vector 类型材质属性

c++
#pragma property vector _a
#pragma property vector _b (1.0,2.0,3.0,4.0)
#pragma property vector _c (2.0)
#pragma property vector _d (1.0,2.0)
#pragma property vector _e (1.0,2.0,3.0)

在 材质(Material)中显示效果:

【Shader_Common_property005.png】

matrix 类型材质属性

c++
#pragma property matrix _a

在 材质(Material)中显示效果:

【Shader_Common_property006.png】

texture2D 类型材质属性

值得注意的是,texture2D 类型的 材质属性(Property)不能定义任何初始值。

如果在 texture2D 类型的 材质属性(Property)后接 vector 类型且同名并加上 _ST 后缀的 材质属性(Property),该 材质属性(Property)会默认为描述该贴图的平铺率和偏移率,其中:

  • 前两个维度的参数(X,Y)分别控制 X(U 方向) 和 Y(V 方向)的平铺率。

  • 后两个维度的参数(Z,W)分别控制 X(U 方向) 和 Y(V 方向)的偏移率。

c++
#pragma property texture2D _a

#pragma property texture2D _b
#pragma property vector _b_ST

在 材质(Material)中显示效果:

【Shader_Common_property007.png】

cubeMap 类型材质属性

值得注意的是,cubeMap 类型的 材质属性(Property)不能定义任何初始值。

c++
#pragma property cubemap _a

在 材质(Material)中显示效果:

【Shader_Common_property008.png】