概括
本文将解释如何从自定义 Op 访问当前图形状态的系统参数,例如当前帧时间或样本数量。
如果您正在寻找有关如何编写和编译自定义 Op 的信息,请参阅Q100326:如何编写和测试您的第一个自定义 Op 。
更多信息
实现自定义 Op 时的一个常见障碍是,返回当前时间(shutterOpen 或 ShutterClose 值)或时间样本数量的 Cook 接口函数可能不会返回正确的结果,除非设置了自定义 Op 所属 Op 链的节点正确地起来。
例如,这与以下调用相关:
Foundry ::Katana::GetCurrentTime(interface)
Foundry ::Katana::GetShutterOpen(interface)
Foundry ::Katana::GetShutterClose(interface)
Foundry ::Katana::GetNumSamples(interface)
为了能够从这些函数中获得预期的返回值,有必要添加系统操作参数。通常由节点(或通过interface.execOp
托管 Op)负责提供这些。
如果 Op 是通过 GenericOp 节点实例化的,则其addSystemOpArgs参数需要设置为Yes 。
如果 Op 是通过自定义 NodeTypeBuilder 注册的,则发送到buildOpChain()
接口对象具有addOpSystemArgs()
方法,该方法会将“系统”GroupAttribute 添加到 Op 参数。 Op 可以检索并使用它。
注意: 相关的 NodeTypeBuilder 函数可以在Katana开发人员指南中找到。
实施示例
附件是一个基于 NodeTypeBuilder 的简单节点类型的示例,该示例在/root/world/geo/hello_world处创建类型为“hello world”的单个位置,并在其上运行 HelloWorld Op。 (在此示例中,在/root处设置一些属性)。
Op 源需要先编译才能使用。为此,请按照Katana安装目录中包含的 $ KATANA _ROOT/plugins/Src/README.md文件中的说明进行操作。
有关更详细的指导,请参阅Q100326:如何编写和测试您的第一个自定义 Op 。
一旦 C++ 源代码被编译成 .so 或 .dll 文件,该文件需要放置在KATANA _RESOURCES目录的Ops子文件夹中,并且 NTB.py 需要放置在KATANA的Plugins子文件夹中_RESOURCES目录。
有关设置KATANA的详细信息,请参阅Katana安装指南。
将 Op 附加到节点 Op 链时添加“系统”Op arg 的相关代码如下:
opArgs = FnAttribute.GroupBuilder() interface.addOpSystemArgs(opArgs) interface.appendOp('HelloWorld', opArgs.build())
这相当于执行以下操作:
graphState = interface.getGraphState() opArgs = FnAttribute.GroupBuilder() opArgs.set('system', graphState.getOpSystemArgs())
interface.appendOp('HelloWorld', opArgs.build())
“HelloWorld”Op 可以访问它,例如,将当前时间设置为根的属性:
static void cook(Foundry::Katana::GeolibCookInterface& interface) { if (interface.atRoot()) { interface.setAttr("Hello", FnAttribute::StringAttribute("World!")); interface.setAttr("CurrentTime", FnAttribute::FloatAttribute(Foundry::Katana::GetCurrentTime(interface))); } interface.stopChildTraversal(); }
技术说明
GraphState::getOpSystemArgs()
返回一个包含“timeslice”组(“currentTime”、“shutterOpen”、“shutterClose”、“numSamples”)和“variables”组(图形状态变量)的组。该组应设置为“系统”Op arg; CookInterface 调用(例如GetCurrentTime
和GetGraphStateVariables
是调用getOpArg("system.[...]")
的便捷函数。
进一步的帮助
如果您对本文中包含的信息遇到任何问题,请打开支持票证,让我们知道您遇到的问题以及您迄今为止采取的故障排除步骤。
有关如何开立支持票证的更多信息,请参阅Q100064:如何提出支持票证。
附件
我们很遗憾听到
请告诉我们