Q100170:开始将纹理应用于 Katana 中的对象

关注

概括

着色器库和工作室管道以各种不同的方式处理纹理, Katana提供了一个灵活的框架来分配纹理,遵循一些常见的约定。

以下是与 3Delight、RenderMan 和 Arnold 渲染器配合使用的一些选项的摘要。另请参阅随附的示例场景,该场景演示了此处解释的两种方法。

 

更多信息

使用材质属性来声明纹理

为每个对象提供自己的纹理的最简单方法是为每个对象创建一个材质,并在着色器中将纹理显式声明为字符串参数。然后为每个对象分配相关材料。

这种方法是最耗费人力的,尤其是在处理包含大量对象的场景时,并且在必须更改材质时缺乏灵活性。

通常许多对象可以共享相同的材质,但需要分配不同的纹理。在这种情况下,可以设置场景,以便每个对象拾取自己的纹理:

 

使用对象属性来声明纹理

要渲染的对象可以通过任意属性指向相关的纹理文件,而不是在材质上设置纹理。

Katana中的用户数据和 primvar

渲染器允许使用可由着色器查找的用户数据或 primvar。在Katana中,约定是将任意几何数据作为名为Geometry.任意.xxx的属性读入,然后默认情况下也将其作为用户或 primvar 数据写出到渲染器。这意味着,如果您使用 primvars 或用户数据来指定纹理,则可以自动完成此工作。

Katana中使用 RenderMan 时使用 primvars 声明纹理

RenderMan有一种跨实例处理纹理的方法,即解析实例位置处的着色器参数语法,并通过RenderMan <primstr:attributename> 语法来完成此操作。然而,这仅在 RenderMan 24 中引入。

 

创建示例场景

以下是有关如何使用对象属性来声明纹理的说明。此示例使用 3Delight 渲染器:

  1. “帮助”>“我想要一个小马”菜单中添加一个 CameraCreate、一个 NetworkMaterialCreate 和两个 Pony 节点。请务必更改每个 Pony 节点上的名称参数,以便它们是唯一的。

  2. 在每个 Pony 下游创建一个 AttributeSet 节点,并将路径设置为相应上游 Pony 的场景图位置。

    mceclip1.png

  3. 编辑每个 AttributeSet 节点,并将每个 attributeName 参数更改为“geometry.任意.basecolor.value”,并将参数类型更改为“string”。

    mceclip4.png

  4. 将每个 AttributeSet 的 stringValue 设置为指向唯一的纹理文件。您可以在 $KATANA_ROOT/demos/tx_files/ 中找到Katana附带的示例文件

    mceclip5.png

  5. 跳到 NetworkMaterialCreate 节点(快捷键: Ctrl+MMB选中时按 Ctrl+Enter )并创建 dlPrincipled 和 dlTexture 着色节点。

  6. 编辑dlTexture节点并将Texture File参数设置为'{attr:geometry.任意.basecolor.value}';这将从之前设置的属性中读取文件路径。

    mceclip6.png

  7. 将dlTexture的outputColor端口连接到dlPrincipled节点的Base > Color端口的输入,并跳出NetworkMaterialCreate(快捷键: Ctrl+Backspace )。

    mceclip7.png

  8. 选择除 Pony 节点之外的所有节点,然后按“M”在下游创建合并节点。

    mceclip8.png

  9. 在合并下方创建并连接一个 MaterialAssign 节点,添加值为“/root/world/geo//*”的自定义 CEL 引用,并将materialAssign 参数设置为“/root/materials/NetworkMaterial”。这会将材质应用到场景图中“地理位置”下方的所有位置。

    mceclip9.png

  10. 最后,在 MaterialAssign 下游创建一个 GafferThree 节点,并从“添加 3Delight”菜单中添加一个环境光。

渲染时,您现在将看到两种不同的纹理从单一材质应用于小马。

mceclip10.png

延伸阅读

有关跨实例处理纹理的更多信息,请参阅: Q100508:分层(实例源)实例化。

附件

我们很遗憾听到

请告诉我们