欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

翻译HoudiniEngine官方文档:PDG

发布时间:2023/12/8 57 豆豆
生活随笔 收集整理的这篇文章主要介绍了 翻译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的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。