mental ray 着色器语言扩展
 
 
 

命名准则

Maya 特有的语法扩展

可为节点上的每个属性及节点本身提供其他参数。由于这些参数在 mental ray 的场景描述语言中没有对应的对象,因此工厂解析器已进行扩展,并可超出标准 mental ray 语法范围来识别某些可基于每个属性、每个着色器或现象提供的关键字。

通过关键字添加其他属性

可通过在 .mi 声明文件中包含关键字来为节点上的每个属性及节点本身提供其他参数。

这些关键字必须以 #: 为前缀,以便声明文件仍为标准 mental ray 解析器所接受;由于这些标准 mental ray 解析器(而不是节点工厂解析器)会将这些关键字认作注释,因此会将其忽略。错误位置的特殊注释或语法错误的 #: 注释会导致解析错误,这些错误会写入“脚本编辑器”(Script Editor)

放置关键字的位置及写入内容

此类 #: 注释可在两个位置显示:着色器参数或现象参数之后,或声明的要求部分中。

  • 如果显示在参数之后,则以下语法有效:

    default scalar [scalar [scalar]] max scalar [scalar [scalar]] min scalar [scalar [scalar]] shortname "string" softmax scalar softmin scalar hidden boolean

  • 如果显示在声明的要求部分中,则以下是正确语法:

    nodeid integer

如果未提供这些附加的关键字,则默认值为 0;未定义最小值/最大值和软最小值/软最大值;通过计算节点上的属性来唯一指定短名称。同样,唯一的节点 ID 也通过计算节点来确定。

对于属性,不是每个关键字对于每种属性类型都具有意义。Maya 和节点工厂支持以下属性:

mental ray 类型 Maya 类型 默认值 最小值/最大值 软最小值/最大值

布尔值

布尔值

0/1

   

颜色

float3

3 个标量

   

整数

1 个整数

1 个整数

1 个整数

标量

float

1 个标量

1 个标量

1 个标量

矢量

float3

3 个标量

3 个标量

 

短名称

可为每个属性提供短名称。工厂将 R、G、B 附加到颜色子名称/短名称,并将 X、Y、Z 附加到向量子名称/短名称。

示例 1(共 2 个):

declare shader
	vector					#: shortname "ov"
	"multiplyDivide" (
		integer		"operation",		#: default 1 min 0 max 2
		vector		"input1",		#: default 1. 1. 1.
		vector		"input2"		#: default 1. 1. 1.
		)
	#:
	#: nodeid 6894 # This is the node ID for binary Maya files.
	#:
	version 1
end declare

示例 2(共 2 个):

declare shader
	struct {
		color		"outColor",		#: shortname "oc"
		scalar		"outAlpha"		#: shortname "oa"
	} "ramp" (
		array struct		"colorEntryList" {
			scalar		"position",
				#: default 1.
			color		"color"
				#: default 0.8 0.8 0.8
			},
			#: shortname "cel"			# compound's short name
		scalar		"uWave",
			#: shortname "uw"
			#: default 0.5
			#: softmin 1E-5 softmax 1
			#: min 1.0E-05 max 1
		scalar		"vWave",
		scalar		"noise",
		scalar		"noiseFreq",
		scalar		"hueNoise",
		scalar		"satNoise",
		scalar		"valNoise",
		scalar		"hueNoiseFreq",
		scalar		"satNoiseFreq",
		scalar		"valNoiseFreq",
		# Inherited from Texture2d
		vector		"uvCoord",
			#: shortname "uv"
		vector		"uvFilterSize",
		scalar		"filter",
		scalar		"filterOffset",
		boolean		"invert",
			#: default 0
		boolean		"alphaIsLuminance",
			#: default 1
		color		"colorGain",
			#: default 1.0 0.8 0.8
			#: min 0.1 0.1 0.1 max 0.5 0.5 0.5
		color		"colorOffset",
		scalar		"alphaGain",
			#: shortname "ag"
		scalar		"alphaOffset",
			#: shortname "ao"
		color		"defaultColor"
		)
	#:
	#: nodeid 6895 # Node ID for binary Maya files
	#:
	apply texture
	version	2
end declare

工厂解析器语法与 mental ray 解析器语法

有关工厂解析器不接受但 mental ray 的解析器接受的语法的详细信息:

 declare shader
 			vector
 			"reverse" (
			vector "input",
			)
 end declare

工厂解析器会针对该逗号报告语法错误。

挂钩

工厂从 mental ray 着色器声明中创建 Maya 节点。创建后,每个此类节点均代表一个自定义 mental ray 着色器(准确地说是着色器定义)。此类节点可以方便地与各种 Maya 场景实体一起使用。

消息属性

节点工厂会将以下 mental ray 着色器参数类型注册为消息属性:灯光、几何体、颜色纹理、标量纹理、向量纹理、灯光剖面和着色器。

虽然可以将任意节点与这些属性连接(如果在“属性编辑器”(Attribute editor)中将节点拖动到消息属性,则源节点的消息属性将连接到该属性。例如 node1.message -> mrShaderNode.shader),但应建立正确的连接。否则,可能会导致故障或渲染中止。

预计以下节点将连接到每个 mental ray 着色器参数类型。

  • 灯光:灯光变换节点。例如,pointLight1.message -> dgs_material1.lights[0]
  • 几何体:几何体着色器。例如,mib_geo_sphere1.message -> mib_geo_instance1.object
  • 着色器:mental ray 着色器。例如,mib_illum_phong1.message -> mib_geo_instance.material
  • 颜色纹理、标量纹理、向量纹理:mentalrayTexture 节点。例如,mentalrayTexture1.message -> mib_texture_lookup1.tex。着色器的属性编辑器中颜色/标量/向量纹理属性旁边的按钮将创建新的 mentalrayTexture 节点,并将其与属性连接。
  • 灯光剖面:mentalrayLightProfile 节点。例如,mentalrayLightProfile1.message -> mib_light_photometric.profile。着色器的属性编辑器中灯光剖面属性旁边的按钮将创建新的 mentalrayLightProfile 节点,并将其与属性连接。
    材质(Materials)

    在着色组节点中可指定自定义材质。在“属性编辑器”(Attribute Editor)中,转到与该着色器一起创建的着色引擎的 mental ray 部分。启用“抑制所有 Maya 着色器”(Suppress all Maya shaders),并将所需的自定义着色器与对应的属性相连接。这时,着色引擎将导出为 mental ray 材质。仍可按通常方法将其指定给 Maya 对象。

    灯光(Lights)

    可在任何 Maya 点光源、聚光灯或平行光的 mental ray 部分中指定自定义灯光着色器。启用“抑制所有 Maya 着色器”(Suppress all Maya shaders)并连接灯光着色器。在导出时,此选项将覆盖默认 Maya 着色器,但会保留灯光的其他属性(方向、聚光圆锥体角度等)。

    摄影机(Cameras)

    在任何摄影机形状节点的“属性编辑器”(Attribute Editor)的 mental ray 部分中提供自己的输出、体积、镜头和环境着色器。当前无法指定多个输出着色器。

    变换(Transforms)

    可以使用自定义几何体着色器覆盖附加到变换的形状节点。只需在 Maya 变换节点的“mental ray”部分中打开“启用几何体着色器”(Enable geometry shader)。理想情况下,变换节点应包含单个形状子对象。

    纹理(Textures)

    应使用 mental ray 纹理节点。mental ray 纹理可从具有“颜色纹理、标量纹理、向量纹理”参数的着色器的“属性编辑器”(Attribute Editor)中创建,并且将与该着色器相连接。