官方文档:《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_SUCCESSHAPI_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相关推荐

  1. 翻译Houdini官方文档:PDG教程之HDA处理器

    官方文档:PDG Tutorial 3 HDA Processor Part 1 关于这个教程 你将会学到什么 步骤 0 - 拷贝所需的HDA文件 步骤 1 - 观察HDA 步骤 2 - 设置PDG输 ...

  2. 翻译Houdini官方文档:PDG/TOPs介绍

    官方文档:Introduction to TOPs 总览 使用TOPs工作 TOP节点UI Processors(处理器) Mappers partitions(分割) Schedulers(调度器) ...

  3. [翻译]ElasticSearch官方文档-安装

    本文翻译自:www.elastic.co/guide/en/el- 本文是Elasticsearch的入门文档,将会介绍ElasticSearch在不同环境下的安装. 安装 Elasticsearch ...

  4. [翻译]ElasticSearch官方文档-执行查询和过滤操作

    本文翻译自:www.elastic.co/guide/en/el- 本文是Elasticsearch的入门文档,将会介绍ElasticSearch中的查询操作和过滤操作. 执行查询 现在我们已经看到了 ...

  5. 翻译: Oralce官方文档-- Data Blocks, Extents, and Segments

    Data Blocks, Extents, and Segments                                                                   ...

  6. 【翻译一下官方文档】邂逅uniCloud云函数(基础篇)

    我将用图文的形式,把市面上优质的课程加以自己的理解,详细的把:创建一个uniCloud的应用,其中的每一步记录出来,方便大家写项目中,做到哪一步不会了,可以轻松翻看文章进行查阅.(此文长期更新连载) ...

  7. Maven介绍(翻译自官方文档)

    1. Introduction(简介) Maven, a Yiddish word meaning accumulator of knowledge, was originally started a ...

  8. 翻译CGAL官方文档教程:Hello World

    原文链接:https://doc.cgal.org/latest/Manual/tutorial_hello_world.html 前言 这个教程的目标读者是:了解C++并有基础几何学算法知识的CGA ...

  9. 用Lombok项目减少样板代码(翻译自官方文档)

    介绍 安装 Lombok注释 @Getter and @Setter @NonNull @ToString @EqualsAndHashCode @Data @Cleanup @Synchronize ...

最新文章

  1. 数据库系统DBS的特点
  2. 【每日一算法】重排链表
  3. LeetCode 集锦(二十二) - 第 101 题 Symmetric Tree
  4. python mysql数据库长连接_python 长连接 mysql数据库
  5. java标识符遵循规范
  6. 16 大常考算法知识点,你掌握了吗?
  7. 1777:文件结构“图”
  8. base64 java php_利用PHP将图片转换成base64编码的实现方法
  9. 【数据结构与算法】实验 Dijkstra算法解决欧洲旅行问题
  10. 信息学奥赛一本通 1141:删除单词后缀 | OpenJudge NOI 1.7 20
  11. fmea第五版pfmea表格_FMEA第五版中文版.pdf
  12. 《Java 8 实战》 学习笔记一(行为参数化)
  13. 前端生成pdf和word
  14. python msp430_MSP430
  15. css3新单位vw、vh、vmin、vmax的使用介绍
  16. 近期一些我寨采用的新芯片资料汇总(更新Rk3066)
  17. CISCO 交换设备IOS 备份/恢复操作
  18. C语言:野指针成因。
  19. 不外昨夜下战书当店的裘姓值班司理则称
  20. 如何在NLP领域做成一件事by周明ACL计算语言学会候任主席(附PDF公号发“NLP做事”下载rar讲座PPT等10文件)...

热门文章

  1. Unity插件之天气系统UniStorm
  2. 40核至强服务器性能如何,20核心40线程怎么样?双路E5-2680 V2评测
  3. JavaScript使用事件onclick导致css样式失效问题
  4. c语言中的英语缩写,英文短信缩写:超实用总结(C开头)
  5. 残忍的沟里学姐 (数据结构作业)
  6. 低代码与BPM有什么区别?
  7. 二、不浪费原料的汉堡制作方案(Weekly Contest 165)
  8. linux pdf翻译
  9. 中公教育python培训讲师面试题_【中公教育讲师面试题目|面试经验】-看准网
  10. 未发表的2015年年终总结