Q100326:如何编写和测试你的第一个自定义操作

概括

Katana中,操作(Ops)是创建和操作 3D 场景数据的基本构建模块。操作是称为操作类型(Op Types)的插件实例,这些插件是用 C++ 编写的。它们可以执行各种操作,使用Katana操作 API来操作场景图和修改属性

本文提供了一个逐步示例,说明如何基于$KATANA_ROOT/plugins/Src/Ops下的 HelloWorld 示例 Op 编写、编译和测试自定义 Op

更多信息

在创建自定义操作之前,查看位于$KATANA_ROOT/plugins/Src/Ops的示例操作可能会有所帮助。本教程专门基于 HelloWorld 示例操作。

以下步骤描述了如何修改此操作的源代码,以创建一个可以读取和设置场景图中位置属性的操作。

  1. 修改$KATANA_ROOT/plugins/Src/Ops/HelloWorld/src/HelloWorldOp.cpp中的cook()函数,使其内容如下:
static void cook(Foundry::Katana::GeolibCookInterface& interface)
{
   FnAttribute::StringAttribute typeAttr = interface.getAttr("type");
   interface.setAttr("testType",  typeAttr);

    if (interface.atRoot())
    {
       interface.setAttr("hello", FnAttribute::StringAttribute("world!"));
    }

}

  1. 要构建示例 Op 插件,请按照$KATANA_ROOT/plugins/Src/README.md中的说明进行操作。

    请确保cmake命令中的源文件路径指向正确的Katana版本。无需在cmake命令中包含-DCMAKE_PREFIX_PATH ,因为它指定了其他 Op 示例的依赖项,而我们在此示例中并不关注这些示例。

  1. 插件构建和安装完成后,请确保安装目录是KATANA _RESOURCES的一部分。按照 README.md 中给出的命令,MyKatanaResources 目录应该包含在KATANA _RESOURCES中。

  1. 启动Katana ,创建一个 CameraCreate 节点,并将一个 GenericOp 节点连接到该节点。

  1. 将 GenericOp 节点的opType参数设置为“HelloWorld”。这样做的结果应该是,每个位置都会设置一个名为testType 的属性,该属性的值将是该位置的类型。此外 /root还会设置一个名为 hello 的属性,其值为world!

还可以修改cook cook()函数,使其能够读取或设置您感兴趣的某个位置的任何属性,或执行许多其他操作。

有关可在自定义操作中使用的更多功能,请参阅Katana开发人员指南中的 Cook 接口 (C++)

注意:默认情况下,操作会在所有位置运行(由GenericOp 节点中的applyWhere参数指定),因此它会在场景图的每个位置执行。在上面的示例中,这会导致所有位置的testType属性都被设置。

因为这种情况并非总是可取的,所以上面的示例还包含一个 if 语句,用于检查接口是否位于atRoot() - 这将导致 if 块中的语句仅在 Op 在其被创建的最顶层位置运行时执行,并且您可以在 if 语句之后使用interface.stopChildTraversal()来阻止 Op 遍历该最顶层位置下的整个场景图。

如果您想创建自定义节点类型以使用您的操作,请参考位于$KATANA_ROOT/plugins/Src/Ops/Messer/RegisterMesserNode.py下的基于 NodeTypeBuilder 的节点类型示例。

Katana开发者指南中记录了一些NodeTypeBuilder API 函数

更多帮助

如果您在执行这些步骤时遇到任何问题,请提交支持工单,并告知我们您遇到的问题以及您目前已采取的故障排除步骤。

有关如何提交支持工单的更多信息,请参阅Q100064:如何提交支持工单



    我们很遗憾听到

    请告诉我们