翻译HoudiniEngine官方文档:PDG
官方文檔:《Houdini Engine 3.6: PDG》
介紹
PDG 是一套用于對任務(wù)進行分配與管理的程序化架構(gòu)。
使用 Houdini Engine,PDG的功能可以輕松地在其他應(yīng)用程序中使用。 最值得注意的是,PDG可用于構(gòu)建由HDA網(wǎng)絡(luò)組成的復(fù)雜資產(chǎn)生成工具,以管理數(shù)據(jù)的依賴與流動關(guān)系。
PDG網(wǎng)絡(luò)可以使用TOP節(jié)點嵌入到HDA中,并在 Houdini Engine 的 session 中使用。 Houdini Engine 提供了PDG 相關(guān)的API,以管理PDG的 cook 過程并獲取TOP節(jié)點的輸出結(jié)果。
在HDA中通過TOP節(jié)點使用PDG
有兩種方式在HDA中嵌入TOP節(jié)點:
- TOP SOP 節(jié)點 ,這是一種 SOP節(jié)點。
- TOP網(wǎng)絡(luò)節(jié)點,這是一種 Object節(jié)點
TOP SOP
這是讓PDG在 Houdini Engine 中工作的最簡單方法。 TOP SOP 節(jié)點 包含構(gòu)成PDG網(wǎng)絡(luò)的TOP節(jié)點,并將輸出的任何幾何體傳遞給下一個SOP節(jié)點。多個輸出將自動合并,并擁有 group。對 TOP SOP 節(jié)點 進行cook的時候,將自動 cook 其所包含的TOP網(wǎng)絡(luò),并且它的輸出與其他SOP節(jié)點是一樣的。 因此,這不需要顯式使用PDG相關(guān)API來對網(wǎng)絡(luò)進行 cook 和 dirty。
TOP網(wǎng)絡(luò)
TOP網(wǎng)絡(luò)節(jié)點 是包含TOP節(jié)點的 Object節(jié)點。必須使用 PDG 相關(guān)的 API 來顯式地對PDG網(wǎng)絡(luò)進行 cook。這允許宿主應(yīng)用程序為用戶提供對PDG進行 cook 的相關(guān)機制,例如 dirty 和 cook。每個 work item 的 cook 結(jié)果可以被查詢,并且宿主程序可以通過輸出結(jié)果的路徑來加載數(shù)據(jù)。
環(huán)境和路徑
確保在 Houdini Engine 的 session 中TOP節(jié)點所使用的“環(huán)境變量”與“非絕對路徑”有效是很重要的。
一個非常重要的設(shè)置是 scheduler 的工作目錄,該目錄是用于生成中間結(jié)果文件的根目錄,也可能是最終結(jié)果文件的根目錄。 默認情況下,所有的 TOP scheduler 都使用$HIP環(huán)境變量,而該變量在 Houdini Engine 的 session 中是無效的——因為根本不存在 .hip 文件。 因此應(yīng)使用以下解決方案之一:
- 在 houdini.env 文件中指定一個全局的環(huán)境值,例如MY_HAPI_PDG_DIR=C:/projects/hapipdg,然后將 scheduler 的工作目錄參數(shù)設(shè)置為此值。
- 將 scheduler 的工作目錄參數(shù)暴露給HDA,這樣宿主應(yīng)用程序就可以為每個HDA設(shè)置正確的工作目錄。
建議將所有其他路徑(尤其是結(jié)果文件)都基于公共的根路徑,例如工作目錄或其他全局環(huán)境路徑(例如$MY_ROOT_PATH/geometry/test1.bgeo)。 這使得可以用單個變量來管理所有 PDG work items 中所用的路徑。
Schedulers
默認情況下,“TOP SOP 節(jié)點” 和 “TOP網(wǎng)絡(luò)節(jié)點” 都使用 Local Scheduler,該 scheduler 計劃要在本地機器上執(zhí)行 PDG 的 work item。 為了在其他機器上分配工作,也可以創(chuàng)建相應(yīng)的 “farm scheduler ” 并在TOP網(wǎng)絡(luò)中指定使用。 在HDA中使用其他 scheduler 不需要任何特殊的考慮或額外的工作,但請確保在Houdini Engine 的 session 中設(shè)置了 scheduler 所需的任何環(huán)境。 通常,可以在創(chuàng)建 Houdini Engine 的 session 時通過houdini.env文件完成此操作。
Dirtying、Cooking、Events
PDG允許對TOP網(wǎng)絡(luò)進行 dirty 和 cook,這意味著對display節(jié)點及其隱含的依賴網(wǎng)絡(luò)進行 dirty 和 cook。 類似地,也可以將單個TOP節(jié)點及其依賴關(guān)系網(wǎng)絡(luò)進行 dirty 和 cook。 HAPI_DirtyPDGNode() 允許提供一個標志,并刪除 work item 先前的結(jié)果。
HAPI_CookPDG() 支持阻塞和非阻塞的cook形式。 在 cook 時,將為依賴關(guān)系網(wǎng)絡(luò)中生成的TOP節(jié)點及其 work item 發(fā)出PDG事件(HAPI_PDG_EventType)。 這些事件代表了 cook 的實時狀態(tài),類似于Houdini編輯器中顯示的TOP節(jié)點中的 work item 的狀態(tài)。 要查詢特定PDG的事件,必須指定其 PDG graph context。 由于每個TOP節(jié)點都是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 狀態(tài)發(fā)生改變。可以查看當前 work item 的狀態(tài)(HAPI_PDG_WorkitemState)。
- HAPI_PDG_EVENT_COOK_WARNING : 節(jié)點的警告信息。
- HAPI_PDG_EVENT_COOK_ERROR : PDG 完成 cook 但有 error。
- HAPI_PDG_EVENT_COOK_COMPLETE: PDG 成功完成 cook。
work item 的狀態(tài)在 PDG 的 cook 過程中會發(fā)生改變。下面一些狀態(tài)(HAPI_PDG_WorkitemState)可能會有用:
- HAPI_PDG_WORKITEM_DIRTY : Work item 被 dirty 了。
- HAPI_PDG_WORKITEM_COOKING : Work item 正在 cook。
- HAPI_PDG_WORKITEM_COOKED_SUCCESS : Work item 已經(jīng)成功完成 cook。
- HAPI_PDG_WORKITEM_COOKED_CACHE : Work item 已經(jīng)完成 cook,但使用的是之前的緩存結(jié)果。
- HAPI_PDG_WORKITEM_COOKED_FAIL : Work item cook 失敗了。
- HAPI_PDG_WORKITEM_COOKED_CANCEL : Work item 已經(jīng)被取消。
當 work item 出現(xiàn)HAPI_PDG_WORKITEM_COOKED_SUCCESS和HAPI_PDG_WORKITEM_COOKED_CACHE狀態(tài)時,可以查詢生成的結(jié)果。 請參閱 PDG Cooking With Events 的代碼范例來看如何 cook 和監(jiān)聽事件。
PDG 代碼范例
可參閱 PDG Cooking Samples 來看如何在HAPI中使用PDG。
PDG API
以下函數(shù)讓你可以在HDA中管理和查詢PDG。 有關(guān)更多信息,請參見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
總結(jié)
以上是生活随笔為你收集整理的翻译HoudiniEngine官方文档:PDG的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转]XML详解--Schema
- 下一篇: 下载测试点