翻译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相关推荐
- 翻译Houdini官方文档:PDG教程之HDA处理器
官方文档:PDG Tutorial 3 HDA Processor Part 1 关于这个教程 你将会学到什么 步骤 0 - 拷贝所需的HDA文件 步骤 1 - 观察HDA 步骤 2 - 设置PDG输 ...
- 翻译Houdini官方文档:PDG/TOPs介绍
官方文档:Introduction to TOPs 总览 使用TOPs工作 TOP节点UI Processors(处理器) Mappers partitions(分割) Schedulers(调度器) ...
- [翻译]ElasticSearch官方文档-安装
本文翻译自:www.elastic.co/guide/en/el- 本文是Elasticsearch的入门文档,将会介绍ElasticSearch在不同环境下的安装. 安装 Elasticsearch ...
- [翻译]ElasticSearch官方文档-执行查询和过滤操作
本文翻译自:www.elastic.co/guide/en/el- 本文是Elasticsearch的入门文档,将会介绍ElasticSearch中的查询操作和过滤操作. 执行查询 现在我们已经看到了 ...
- 翻译: Oralce官方文档-- Data Blocks, Extents, and Segments
Data Blocks, Extents, and Segments ...
- 【翻译一下官方文档】邂逅uniCloud云函数(基础篇)
我将用图文的形式,把市面上优质的课程加以自己的理解,详细的把:创建一个uniCloud的应用,其中的每一步记录出来,方便大家写项目中,做到哪一步不会了,可以轻松翻看文章进行查阅.(此文长期更新连载) ...
- Maven介绍(翻译自官方文档)
1. Introduction(简介) Maven, a Yiddish word meaning accumulator of knowledge, was originally started a ...
- 翻译CGAL官方文档教程:Hello World
原文链接:https://doc.cgal.org/latest/Manual/tutorial_hello_world.html 前言 这个教程的目标读者是:了解C++并有基础几何学算法知识的CGA ...
- 用Lombok项目减少样板代码(翻译自官方文档)
介绍 安装 Lombok注释 @Getter and @Setter @NonNull @ToString @EqualsAndHashCode @Data @Cleanup @Synchronize ...
最新文章
- 数据库系统DBS的特点
- 【每日一算法】重排链表
- LeetCode 集锦(二十二) - 第 101 题 Symmetric Tree
- python mysql数据库长连接_python 长连接 mysql数据库
- java标识符遵循规范
- 16 大常考算法知识点,你掌握了吗?
- 1777:文件结构“图”
- base64 java php_利用PHP将图片转换成base64编码的实现方法
- 【数据结构与算法】实验 Dijkstra算法解决欧洲旅行问题
- 信息学奥赛一本通 1141:删除单词后缀 | OpenJudge NOI 1.7 20
- fmea第五版pfmea表格_FMEA第五版中文版.pdf
- 《Java 8 实战》 学习笔记一(行为参数化)
- 前端生成pdf和word
- python msp430_MSP430
- css3新单位vw、vh、vmin、vmax的使用介绍
- 近期一些我寨采用的新芯片资料汇总(更新Rk3066)
- CISCO 交换设备IOS 备份/恢复操作
- C语言:野指针成因。
- 不外昨夜下战书当店的裘姓值班司理则称
- 如何在NLP领域做成一件事by周明ACL计算语言学会候任主席(附PDF公号发“NLP做事”下载rar讲座PPT等10文件)...