附录 A:mental Ray 用户数据节点

 
 
 

下面是对 mental Ray 用户数据节点及其在 Maya 内部的使用方法的简要说明。

概述

mental Ray 支持大量预定义类型的场景实体。但是,在某些应用程序中,这些实体类型不足以有效地表示场景中的数据。在其他情况下,实体包含一些自定义数据或自定义属性会非常有用。若要解决这些问题,可以在场景中的几乎任何位置使用和放置用户数据实体。

用户数据类型

支持两种类型的用户数据:

这两种类型的用户数据都具有自己的特定节点表示。

声明用户数据的优点是 mental Ray 知道参数的类型。因此,mental Ray 能够正确交换数据以防止在某个平台上创建数据后,在另一个使用不同字节顺序(字节序)的平台上对其进行渲染。

另一方面,应准备用于交换的文字用户数据(如果需要),例如,通过添加一个整数值来使其能够检测是否有必要交换,这需要在检索数据的着色器中执行。

文字用户数据

使用新的 Maya 节点类型 mentalrayUserData 表示这种类型的用户数据。它提供了两种输入属性(asciiDatabinaryData)以设定或获取 ASCII 编码(用于 .mi 文件)或实际的字节块。

ASCII 表示仅存储在字符串类型的节点属性中,因为它仅使用可在 Maya 内部使用的 7 位字符。该编码使用两个字符表示单个字节;因此字符串长度必须为二的倍数。对于 .mi 文件导出,基本上是复制这种表示。对于集成渲染,将在插件中对数据进行解码,并将生成的二进制数据块提供给 mental Ray 核心。

声明用户数据

这种类型的用户数据非常类似于常规着色器节点,因为它提供了一组输入属性。它不提供输出属性,因为与在着色器中的计算一样,且节点仅用作数据保持设备。

与常规自定义着色器一样,可以通过着色器管理器在 data.mi 声明中生成这种类型的节点。节点工厂检测到这是用户数据节点,并在内部使用 miFactoryData 属性标记这些节点以便于快速识别。

按照用于其他工厂节点的相同方法创建 Maya 用户界面,并允许在属性编辑器中设定值。mental Ray 不支持连接到其他节点;因此将会在转换时解析 Maya 中的任何连接并对该帧导出固定的值。

Maya 中的用法

可以按照下面的两种方法使用这两种类型的用户数据节点:

应使用标准 .message 栓连接所有用户数据节点。实际上,也可以使用其他任何栓进行连接,与栓本身无关。

可以使用标准工具(例如,“连接编辑器”(Connection Editor),从“Hypergraph”“Hypershade”拖放等)在 Maya 内附加数据节点。

在 Maya 中应直接连接到着色器。连接到形状节点(包括几何体、灯光和摄影机)或变换节点(DAG 实例)等场景实体,均需要添加动态属性 miData(消息),并将其连接到用户数据节点,以便在转换过程中得以识别。

动画数据

在动画中,插件可以检测到对帧之间的用户数据属性或字节块所作的任何更改,并导致 mental Ray 中或导出的 .mi 文件中的增量更改(如果禁用每帧文件选项)。

在 mental Ray 中访问

将用户数据节点附加到着色器参数后,可以使用 mental Ray mi_db_*() 函数(传递输入参数提供的 tag 值)在自定义着色器中访问相应的数据。在大多数情况下,mental Ray 不接触用户数据的内容(除非可能要进行交换,请参见上文)。

获取用户数据内存的指针后,访问声明用户数据的值类似于读取带有匹配声明的 C 结构的字段。对于文字字节数据,数据的布局对 mental Ray 是未知的,因此所有结构和解码均取决于着色器。

常规提示

在 mental Ray 中可以“链接”多个用户数据块,并且可以将链附加到一个场景实体中。在这种情况下,有一个非常有用的提示,那就是向用户数据中添加一个“幻”数,最好是作为块中的第一个值,这样可以使着色器将用户数据识别为期望的数据。