Q100358:如何使用 Geolib3 客户端通过 Python 查询场景图位置的属性,以便检查并响应变化

概括

本文解释了如何使用 Python 生成和查询场景图数据(例如位置属性)。

更多信息

用户可能希望编写 Python 脚本来查询场景图上各个位置的属性值。为了实现这一点,必须先对场景进行“烹饪”(cook)。“烹饪”是指对场景图进行评估,也就是说,必须评估节点图才能计算场景数据。如果未执行此步骤,则属性数据不存在,也无法进行查询。

这可以通过创建一个Geolib3 客户端来实现,该客户端可以请求生成场景数据。请参见以下示例

# We first need to get a hold of the runtime the UI is using
runtime = FnGeolib.GetRegisteredRuntimeInstance()

# Transactions are used to batch together actions
txn = runtime.createTransaction()

# Make a client, and attach it to an Op in the tree, we get the Op from a reference to a Node.
client = txn.createClient()
op = Nodes3DAPI.GetOp(txn, NodegraphAPI.GetNode('Render'))
txn.setClientOp(client, op)

# Commit the transaction to the runtime, if we don't the client will exist, but won't yet be pointing to an Op
runtime.commit(txn)

然后,您可以使用客户端来获取位置信息并检查其属性值,例如获取相机位置的centerOfInterest属性:

location = client.cookLocation('/root/world/cam/camera')
attrs = location.getAttrs()
COI = attrs.getChildByName('geometry.centerOfInterest')
print(COI.getValue())

有关 Geolib3 和 Op API 的更多详细信息,请参阅Katana用户指南的 Op API 部分

请注意,场景图的生成可能是一项计算量很大的操作。应特别注意避免不必要的生成。例如,不建议在每次节点图更改时都自动生成场景图,但可以在用户触发的事件(例如按钮脚本)中进行生成。

如果您发现自己需要花费大量精力才能实现理想的工作流程,请考虑采用涉及操作 (Op) 或操作脚本 (OpScript) 的其他方法。许多工作流程可以通过将问题分解为几个协同工作的操作来实现。

更多帮助

如果您仍然遇到渲染问题,请提交支持工单,并告知我们您遇到的问题以及您目前已采取的故障排除步骤。同时,请提供Q100520 中概述的系统信息:获取操作系统报告以用于Foundry支持调查期间发送的硬件规格信息。

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

    我们很遗憾听到

    请告诉我们