翻译HoudiniEngine官方文档:PDG
官方文档:《Houdini Engine 3.6: PDG》
介绍
PDG 是一套用于对任务进行分配与管理的程序化架构。
使用 Houdini Engine,PDG的功能可以轻松地在其他应用程序中使用。 最值得注意的是,PDG可用于构建由HDA网络组成的复杂资产生成工具,以管理数据的依赖与流动关系。
PDG网络可以使用TOP节点嵌入到HDA中,并在 Houdini Engine 的 session 中使用。 Houdini Engine 提供了PDG 相关的API,以管理PDG的 cook 过程并获取TOP节点的输出结果。
在HDA中通过TOP节点使用PDG
有两种方式在HDA中嵌入TOP节点:
- TOP SOP 节点 ,这是一种 SOP节点。
- TOP网络节点,这是一种 Object节点
TOP SOP
这是让PDG在 Houdini Engine 中工作的最简单方法。 TOP SOP 节点 包含构成PDG网络的TOP节点,并将输出的任何几何体传递给下一个SOP节点。多个输出将自动合并,并拥有 group。对 TOP SOP 节点 进行cook的时候,将自动 cook 其所包含的TOP网络,并且它的输出与其他SOP节点是一样的。 因此,这不需要显式使用PDG相关API来对网络进行 cook 和 dirty。
TOP网络
TOP网络节点 是包含TOP节点的 Object节点。必须使用 PDG 相关的 API 来显式地对PDG网络进行 cook。这允许宿主应用程序为用户提供对PDG进行 cook 的相关机制,例如 dirty 和 cook。每个 work item 的 cook 结果可以被查询,并且宿主程序可以通过输出结果的路径来加载数据。
环境和路径
确保在 Houdini Engine 的 session 中TOP节点所使用的“环境变量”与“非绝对路径”有效是很重要的。
一个非常重要的设置是 scheduler 的工作目录,该目录是用于生成中间结果文件的根目录,也可能是最终结果文件的根目录。 默认情况下,所有的 TOP scheduler 都使用$HIP环境变量,而该变量在 Houdini Engine 的 session 中是无效的——因为根本不存在 .hip 文件。 因此应使用以下解决方案之一:
- 在 houdini.env 文件中指定一个全局的环境值,例如MY_HAPI_PDG_DIR=C:/projects/hapipdg,然后将 scheduler 的工作目录参数设置为此值。
- 将 scheduler 的工作目录参数暴露给HDA,这样宿主应用程序就可以为每个HDA设置正确的工作目录。
建议将所有其他路径(尤其是结果文件)都基于公共的根路径,例如工作目录或其他全局环境路径(例如$MY_ROOT_PATH/geometry/test1.bgeo)。 这使得可以用单个变量来管理所有 PDG work items 中所用的路径。
Schedulers
默认情况下,“TOP SOP 节点” 和 “TOP网络节点” 都使用 Local Scheduler,该 scheduler 计划要在本地机器上执行 PDG 的 work item。 为了在其他机器上分配工作,也可以创建相应的 “farm scheduler ” 并在TOP网络中指定使用。 在HDA中使用其他 scheduler 不需要任何特殊的考虑或额外的工作,但请确保在Houdini Engine 的 session 中设置了 scheduler 所需的任何环境。 通常,可以在创建 Houdini Engine 的 session 时通过houdini.env文件完成此操作。
Dirtying、Cooking、Events
PDG允许对TOP网络进行 dirty 和 cook,这意味着对display节点及其隐含的依赖网络进行 dirty 和 cook。 类似地,也可以将单个TOP节点及其依赖关系网络进行 dirty 和 cook。 HAPI_DirtyPDGNode() 允许提供一个标志,并删除 work item 先前的结果。
HAPI_CookPDG() 支持阻塞和非阻塞的cook形式。 在 cook 时,将为依赖关系网络中生成的TOP节点及其 work item 发出PDG事件(HAPI_PDG_EventType)。 这些事件代表了 cook 的实时状态,类似于Houdini编辑器中显示的TOP节点中的 work item 的状态。 要查询特定PDG的事件,必须指定其 PDG graph context。 由于每个TOP节点都是PDG上下文的一部分,因此可以通过 HAPI_GetPDGGraphContextId() 检索其ID。
以下HAPI_PDG_EventType可能会有用:
- HAPI_PDG_EVENT_WORKITEM_ADD : 在图中添加一个 work item。
- HAPI_PDG_EVENT_WORKITEM_REMOVE : 从图中移除一个 work item。
- HAPI_PDG_EVENT_WORKITEM_STATE_CHANGE : 一个 work item 状态发生改变。可以查看当前 work item 的状态(HAPI_PDG_WorkitemState)。
- HAPI_PDG_EVENT_COOK_WARNING : 节点的警告信息。
- HAPI_PDG_EVENT_COOK_ERROR : PDG 完成 cook 但有 error。
- HAPI_PDG_EVENT_COOK_COMPLETE: PDG 成功完成 cook。
work item 的状态在 PDG 的 cook 过程中会发生改变。下面一些状态(HAPI_PDG_WorkitemState)可能会有用:
- HAPI_PDG_WORKITEM_DIRTY : Work item 被 dirty 了。
- HAPI_PDG_WORKITEM_COOKING : Work item 正在 cook。
- HAPI_PDG_WORKITEM_COOKED_SUCCESS : Work item 已经成功完成 cook。
- HAPI_PDG_WORKITEM_COOKED_CACHE : Work item 已经完成 cook,但使用的是之前的缓存结果。
- HAPI_PDG_WORKITEM_COOKED_FAIL : Work item cook 失败了。
- HAPI_PDG_WORKITEM_COOKED_CANCEL : Work item 已经被取消。
当 work item 出现HAPI_PDG_WORKITEM_COOKED_SUCCESS和HAPI_PDG_WORKITEM_COOKED_CACHE状态时,可以查询生成的结果。 请参阅 PDG Cooking With Events 的代码范例来看如何 cook 和监听事件。
PDG 代码范例
可参阅 PDG Cooking Samples 来看如何在HAPI中使用PDG。
PDG API
以下函数让你可以在HDA中管理和查询PDG。 有关更多信息,请参见HAPI.h。
Cooking
- HAPI_CookPDG
- HAPI_DirtyPDGNode
- HAPI_PausePDGCook
- HAPI_CancelPDGCook
Context、Cook Events、State
- HAPI_GetPDGGraphContexts
- HAPI_GetPDGGraphContextId
- HAPI_GetPDGEvents
- HAPI_GetPDGState
Work Items
- HAPI_CreateWorkitem
- HAPI_GetWorkitemInfo
- HAPI_SetWorkitemIntData
- HAPI_SetWorkitemFloatData
- HAPI_SetWorkitemStringData
- HAPI_CommitWorkitems
- HAPI_GetNumWorkitems
- HAPI_GetWorkitems
- HAPI_GetWorkitemDataLength
- HAPI_GetWorkitemIntData
- HAPI_GetWorkitemFloatData
- HAPI_GetWorkitemStringData
- HAPI_GetWorkitemResultInfo
总结
以上是生活随笔为你收集整理的翻译HoudiniEngine官方文档:PDG的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: [转]XML详解--Schema
- 下一篇: 下载测试点