自定义顶点数据

 
 
 

对于多边形网格,mental Ray for Maya 将检查带有固定前缀“miCustomTex”的其他自定义属性。

该前缀之后的所有字符都将视为自定义数据的名称,例如,属性名称“miCustomTexMyData”的自定义数据名称为 MyData。如果数据属性满足以下要求,则这些数据属性将识别并转换到其他 mental Ray 纹理空间:

这些数组属性可通过 MEL 或 Maya API 创建。处理开始时属性应包括值,否则将忽略这些属性。

数组属性的数据元素按呈现的顺序附加到网格顶点。根据数据类型,它们将占据 mental Ray 中的一个或多个纹理空间。这表示,无论何种情况下,数据类型都将转化为浮点格式。这也可以确保顶点数据将自动为三角形的当前相交点进行插值。

Maya 类型 元素数量 mental Ray 纹理访问
整型 1 tex_list[i].x
双精度 1 tex_list[i].x
向量 3 tex_list[i].x, tex_list[i].y, tex_list[i].z
4 tex_list[i].x, tex_list[i].y, tex_list[i].z, tex_list[i+1].x

仍然缺少有关实际用于某些自定义数组的纹理空间的信息。在当前 mental Ray for Maya 中,默认情况下为进行上纹理操作恰好保留一个纹理空间。但网格可以保持多个 UV 空间。因此,所有自定义顶点数据都在任意纹理空间偏移处开始。如果有多个自定义数组附加到网格,那么节点上所列属性的顺序将确定 mental Ray 中的纹理空间序列。

需要将数据的这种实际布局提供给要利用该数据的着色器。当前执行的两种方法:用户数据和自定义文本替换。用户数据方法将用户数据块附加到 mental Ray 中的网格对象上。可以从着色器中获取。数据块 maya_vertexdata 的声明包含在 mayabase.mi 声明文件中。

如果自定义文本已应用于网格的材质,那么特殊的占位符语法将有助于实现方便的参数值指定。支持下列占位符(示例采用的自定义数据类型为向量,且名称“MyData”作为第一个自定义属性):

占位符 替换为 示例
$<name> 纹理空间索引 $MyData -> 1
$<name>Offset 纹理空间索引 $MyDataOffset -> 1
$<name>Size 已用纹理组件的数量 $MyDataSize -> 3
$<name>Type 自定义数据类型,1 - 整型、2 - 双精度、3 - 向量、4 - 点 $MyDataType -> 3
注意

占位符区分大小写。应避免将特殊美元符 ($) 用作占位符名称之外的其他用途。

示例

这是一个自定义顶点数据和自定义文本着色器的完整示例,该着色器连接到具有以下自定义属性的网格:

自定义文本连接到如下所示的材质:

int "$MyInt"
int offset "$MyIntOffset"
int type "$MyIntType"
int size "$MyIntSize"
double "$MyDouble"
double offset "$MyDoubleOffset"
double type "$MyDoubleType"
double size "$MyDoubleSize"
vector "$MyVector"
vector offset "$MyVectorOffset"
vector type "$MyVectorType"
vector size "$MyVectorSize"
point "$MyPoint"
point offset "$MyPointOffset"
point type "$MyPointType"
point size "$MyPointSize"
"offsets" [$MyInt $MyDouble $MyVector $MyPoint]
"sizes" [$MyIntSize $MyDoubleSize $MyVectorSize $MyPointSize]
"types" [$MyIntType $MyDoubleType $MyVectorType $MyPointType]

在导出的 .mi 文件中,文本已更改为:

int "1"
int offset "1"
int type "1"
int size "1"
double "2"
double offset "2"
double type "2"
double size "1"
vector "3"
vector offset "3"
vector type "3"
vector size "3"
point "4"
point offset "4"
point type "4"
point size "4"
"offsets" [1 2 3 4]
"sizes" [1 1 3 4]
"types" [1 2 3 4]

多边形网格上导出的用户数据块显示为:

data "plane:vxdata"
	"maya_vertexdata" (
		"magic" 1298749048,
		"data" [{
				"name" "Int",
				"type" 1,
				"size" 1,
				"offset" 1
				},{
				"name" "Double",
				"type" 2,
				"size" 1,
				"offset" 2
				},{
				"name" "Vector",
				"type" 3,
				"size" 3,
				"offset" 3
				},{
				"name" "Point",
				"type" 4,
				"size" 4,
				"offset" 4
				}
			]
		)

使用占位符语法或用户数据块,可以编写自定义着色器,以便安全地在适当位置获取自定义数据。