对着色器参数使用{attr:xxx}和{globalattr:xxx}语法

为了实现通用性,可以将着色器参数设置为属性的值。您可以使用本地或全局属性来执行此操作:

{attr:<attribute name>} -查询本地属性

{globalattr:<attribute name>} -查询全局(继承)属性

注意:  查询全局属性比本地属性具有更高的处理成本。

如果在着色器上定义任何字符串参数为{attr:xxx} (例如),然后在MaterialResolve期间查找名为xxx在将材质指定给的位置,并将其用作着色器值。

为了说明这一点,假设您有一个3Delight文件阅读器着色器,其参数名为filename,然后您设置filename{attr:textures.ColMap}filename设置为属性的值textures.ColMap在物料分配到的任何位置。这意味着您可以将原始着色器设置为自动为其应用到的每个对象选取相关的纹理名称属性。

使用{attr:xxx}分配参数的示例

以下步骤显示了如何使用“文件”节点创建3Delight网络材质,以及如何将ImageRead节点的filename参数链接到textures.ColMap几何位置上的属性。

1.   空无一人Katana场景中创建两个DlShadingNodes,将其中一个设置为File,然后输入Material3Delight。链接outColorFile节点,到BaseLayer>Diffuse>Color的参数Material3Delight节点。
2.   在里面filename在“图像”节点的参数中的字段中输入:

{attr:textures.ColMap}

3.   添加一个NetworkMaterial节点, dlSurface终奌站。连接输出Material3Delight节点到NetworkMaterial节点的输入。
4.   添加两个PrimitiveCreate节点和两个AttributeSet节点。使用AttributeSet节点,在每个基本位置上设置一个带有attributeName textures.ColMap的字符串属性。将每个stringValue设置为纹理的路径(例如/tmp/yourTexture.tx和/tmp/yourOtherTexture.tx)。
5.   添加一个CameraCreate节点。
6.   将PrimitiveCreate节点,CameraCreate和NetworkShading节点的输出连接到Merge节点上的输入。在“合并”节点下面添加一个MaterialAssign节点。将NetworkShading材质分配给每个适用的场景图位置。例如,使用CEL语句:

/root/world/geo//*

使用创建的作业{attr:yourParameter}在材料分解过程中进行评估。因此,必须将使用这些参数的任何材料显式分配给任何相关的场景图位置,而不要依赖于继承。

7.   在RenderSettings节点下添加一个GafferThree,并添加一个聚光灯。
8.   在GafferThree节点下面添加一个Render节点。
9.   放置聚光灯和照相机。
10.   右键单击“渲染”节点,然后选择Preview Render

在材料解决时间Katana拿起texture.ColMap参数在每个几何位置上,并为每个几何位置创建一个指定材质的实例,并将材质的文件名参数设置为textures.ColMap

注意:  因为{attr:xxx}如果在MaterialResolve过程中对基础材料进行了评估,则必须直接将基础材料应用于需要它的每个对象,而不是在层次结构中使用材料继承。