翻译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
- 下一篇: 下载测试点