翻译Houdini官方文档:PDG教程之HDA处理器
官方文檔:PDG Tutorial 3 HDA Processor Part 1
- 關于這個教程
- 你將會學到什么
- 步驟 0 - 拷貝所需的HDA文件
- 步驟 1 - 觀察HDA
- 步驟 2 - 設置PDG輸出的可視化
- 步驟 3 - 定義HDA變種的屬性
- 光滑度Wedge:
- 機身長度Wedge:
- 機翼長度Wedge:
- 步驟 4 - 創建HDA幾何體變種
- 常規方式:
- batch方式:
- service方式:
- 步驟 5 - 過濾不需要的HDA幾何體變種
- 步驟 6 - 降低最終HDA輸出的質量
- 完成
- 問題解決
- 1. 字符串名字末尾不容易發現的空格
- 2. 減面節點cook錯誤
關于這個教程
在Houdini中,HDA讓你可以將復雜的場景組件、工具、甚至額外的文件打包到一個特殊的節點中,你可以設計自定義的控制方式,也很容易在隨后進行安裝和分布。
通過PDG,你可以用 HDA Processor 節點 來配置HDA的參數并生成work items(或者說“任務”)并cook它。
這篇教程的流程是:
- 使用 wedge 的方式來創建一個HDA的多個變種
- 使用 HDA Processor 來對多個變種運行任務,并使用多個cook方式
- 過濾出你不想要的版本
- 降低輸出幾何體的質量
(對于TOPs和PDG的基礎知識,可見之前的博客《翻譯Houdini官方文檔:PDG/TOPs介紹》)
你將會學到什么
- 指定HDA的參數設置
- 創建一個HDA的變種
- 使用三種不同的Cook方式來Cook一個HDA
- 可視化PDG的輸出
- 設置PDG服務
步驟 0 - 拷貝所需的HDA文件
導航到路徑Houdini安裝目錄/houdini/help/files/pdg_tutorials/intro_to_hdaprocessor:
找到 he_polyreduce.hda 和 SideFX_spaceship.hda,
在你自己的工作目錄中新建一個名為PDG_TUTORIAL_FILES的文件夾,將上面兩個hda拷進來:
步驟 1 - 觀察HDA
在這個步驟中,你將打開 SideFX_spaceship.hda 并熟悉其中的內容。
(1) 運行Houdini編輯器打開一個新場景。
(2) 導入SideFX_spaceship.hda 并實例化(關于如何導入HDA,可參見 Install and manage digital assets)
(3) 看一下飛船HDA的 Controls 頁面的參數:
(4) 嘗試調節下其中的參數:
可以注意到,調節參數會對幾何體的形狀造成影響。
教程隨后將會使用不同的TOP節點來調整飛船HDA的設置,然后輸出幾何體修改后的版本。
步驟 2 - 設置PDG輸出的可視化
在這一步中,你將設置一個特殊的 File節點,讓你可以在視窗中看到對飛船HDA的調整
(1) 運行Houdini編輯器打開一個新場景。
(2) 保存場景
- 將文件命名為 hdaprocessorpt1tutorial.hip
- 保存到 \PDG_TUTORIAL_FILES 文件夾中
這就是你接下來的工程文件
(3) 在 節點網絡編輯器 中,導航到obj網絡中(如果你還不在的話)
(4) 創建一個Geometry節點,然后進入創建出 geo1 節點
(5) 創建一個File節點
(6) 在File節點的 Geometry File 參數中填:
`@pdg_output`注意:@pdg_output 必須在“反單引號”之中(按鍵位置在鍵盤中數字鍵“1”的左邊,其上檔符號是“~ ”)這是因為 Geometry File 參數是“字符串”類型的參數。詳細信息見Using attributes in expressions
@pdg_output 告訴Houdini去顯示當前選擇的work item的幾何體。
再隨后的教程中,當你在TOP網絡中你點擊一個work item時,你將可以在視窗中看到其對應的宇宙飛船的變體。
(7) 保存文件
步驟 3 - 定義HDA變種的屬性
在這一步中,你將使用Wedge節點來設置一系列SideFX_spaceship.hda的變種。方式是定義PDG的哪些屬性(與HDA的 Control 頁面的參數相關聯)有變種,而變種的數目又是多少。
這些節點所創建的wedge讓你可以在隨后的【步驟4】中生成和比較宇宙飛船HDA的多個版本。
(1) 在 節點網絡編輯器 中,導航到tasks網絡中,然后進入 topnet1節點
光滑度Wedge:
(2) 創建Wedge節點,然后命名為smoothness。
(3) 選擇smoothness節點,配置其參數:
- Wedge Count 為 2
這將決定生成的wedge(或者說變種)的數目 - Wedge Attributes 為 1
這將決定有多少個變化的屬性 - 在Wedge Attributes 下:
- Attribute Name 填 smoothness
這將讓你可以在你的wedge中變化smoothness這個屬性
這個屬性在隨后會控制宇宙飛船的 Smoothness 參數 - Attribute Type 填 Integer
這將會確保smoothness的值總會是一個整數 - Wedge Type 填 Range,而 Start/End 保留默認值0到1
這將表示smoothness是一個“二值”(只能是0或者1)
- Attribute Name 填 smoothness
(4) 對smoothness節點進行Cook
可以看到出現了兩個work item,對應了兩個wedge
smoothness節點生成了兩個宇宙飛船HDA的版本,其中一個smoothness參數的值為0(0%光滑),另一個smoothness參數的值為1(100%光滑)
Tip:
可以通過點擊節點的右下角來打開PDG的“任務圖表(Task Graph Table)”,或者右鍵節點菜單選擇
機身長度Wedge:
(5) 創建Wedge節點,命名為bodylength,將其連接到smoothness之后:
(6) 選擇bodylength節點,配置其參數:
其中:
- Start 為0.5,End 為 2
這將告訴節點為bodylength屬性選擇均勻分布在 Start 和 End 之間的值。
(7) 對bodylength節點進行Cook
可以看到bodylength節點創建了20個wedge,10個光滑,10個非光滑,而bodylength的值則均勻從0.5變化到2。
機翼長度Wedge:
(8) 創建Wedge節點,命名為wingslength,將其連接到bodylength之后:
(9) 選擇wingslength節點,配置其參數:
(10) 對wingslength節點進行Cook
將會出現200個work item
(11) 點擊wingslength節點中的work item,可以看到在smoothness和bodylength節點上的work item與wingslength節點上的相關work item之間出現的線。 這些線及其相應高亮的點顯示了work item之間的依賴關系。
Tip
你可以使用“[”鍵和“]”來逐步瀏覽節點中的 work item。
(12) 保存你的場景
步驟 4 - 創建HDA幾何體變種
在這一步中,你將使用一系列的HDA處理器節點依據Wedge中的設置來創建SideFX_spaceship.hda的變種。這個步驟的目的是創建不同版本的HDA,然后比較它們的視覺表現。
每個HDA處理器節點將使用不同的Cook方法(常規,batch、service)輸出飛船HDA幾何體的變種。 在本教程外你自己的基于HDA的TOP網絡中,使用不同的Cook方式也會為你節省大量時間。
常規方式:
(1) 創建 HDA處理器節點,命名為regular_cook,將其連接到wingslength的后面。
這個節點中的參數會設定要使用的HDA文件,以及如何引用Wedge節點的屬性。
(2) 選擇regular_cook節點,然后配置其參數:
在 Generation 分頁中,在 HDA File 中選擇$HIP(你的工作目錄)下的SideFX__spaceship.hda:
這告訴了節點使用哪個HDA。
當你選擇了HDA后將會有下列事情發生:
- Operator Type 被自動識別:
- HDA的所有參數被對應創建:
在 Work Items 分頁中,選擇 Cache Mode 為 Write Files
這將告訴節點,當緩存文件已存在時則去覆寫它。
在 HDA Parameters 分頁中,使用@的符號來引用之前在Wedge節點中創建的屬性。
Note
使用@attribute來引用屬性被稱作是pull-style的wedge。想要了解更多關于不同種TOP節點的wedge技術,請看 Pull vs. push
Tip
在教程之外你自己的配置中,你可能會需要為你的HDA處理器節點排查些故障,因此我們建議你做如下的事情:
(3) 對regular_cook節點進行Cook
將會有200個work item出現并且開始cook。
regular_cook為每個work item啟動一個進程,然后分別cook每個任務。 regular_cook使用HDA處理器節點默認的cook方式,這也是其最慢的方式。 通常對于這種cook方式,開始這個過程所花費的時間,比實際cook該節點所花費的時間更長。
(4) 點擊regular_cook節點中代表著work item的圓點
在 點網絡編輯器 中,請注意在smoothness,bodylength和wingslength節點上的work item之間以及在regular_cook節點上的相關work item之間出現的連線。 這些連線以及其相應高亮的點顯示了work item之間的依賴關系。
在視窗中,請注意宇宙飛船的變化,這個預覽的效果歸功于我們在步驟2中設置的File節點(其Geometry File 為@pdg_output)。
Tip
- 你可以使用“[”鍵和“]”來逐步瀏覽節點中的 work item。
- 你可以雙擊一個單獨的 work item 顯示其細節面板,然后點擊“Output”來在Gplay中預覽它。
(5) 點擊regular_cook節點中代表著work item的圓點,觀察它們的值。
注意smoothness bodylength wingslength 屬性的值如何在work item之間變化。 是這些值讓飛船HDA形狀發生變化。
(6) 保存場景。
現在你已經創建了 HDA處理器節點,也理解了它如何工作。接下來你將嘗試用其他更快的cook方式。
batch方式:
(7) 拷貝regular_cook節點(注意,復制出來的節點會自動連接到wingslength節點的后面),命名為batch_cook
這個節點將采用 batch 的cook方式。
(8) 選擇batch_cook節點,然后將 Batch Mode 改為All Items in One Batch:
這告訴節點在一個 job 中 cook 所有宇宙飛船HDA的幾何體變種。 這將節省大量的cook時間,因為啟動單個過程的開銷比cook該工作中實際任務所花費的時間要大得多。
Tip
- 當HDA處理器的 work item 是大量的小型任務時,請對它進行批處理,這樣可以更快完成。
- 當HDA處理器的 work item 需要很長時間才能完成時,流程的啟動成本變得無關緊要,此時請勿進行批處理。
(9) 對batch_cook節點進行cook。
在許多情況下,此cook方法比regular_cook節點使用的cook方法要快。 在本教程中,batch方法肯定是兩種cook模式中速度更快的一種。
(10) 保存場景
現在你已經創建了第二個HDA處理器節點,也理解了batch方法是怎么工作的。下一個你將創建的HDA處理器節點會是 最快 的。
service方式:
(11) 拷貝regular_cook節點,命名為service_cook
(12) 在 節點網絡編輯器 中,點擊Tasks,然后點擊 PDG Services
此項詳見PDG Service Manager
(13) 在 PDG Services 中點擊 Add Services 按鈕
(14) 隨后在出現的窗口中,做如下配置:
然后點Add按鈕。
(15) 在 PDG Services 窗口中點擊 Start 按鈕:
隨后你可以在任務管理器中看到你的Houdini進程下多了10個(數目是指定在上面的Pool Size中的) HDA處理器服務實例:
(16) 配置service_cook節點的參數:
- 選擇 Job Options 分頁,打開 Use HDA Processor Service
- 在 Service Name 中選擇剛才創建的服務
(17) 對service_cook節點進行cook。
service_cook使用10個正在運行的HDA處理器服務實例(進程)來cook其每個工作項。 在本教程中,service的cook方法絕對是最快的cook模式。 但是,在本教程之外的場景中,你的工作可能需要很長的時間進行處理,因此,也可能常規Cook或批處理是更好的模式。
(18) 在 PDG Services 窗口中關閉服務,然后關閉窗口。
(19) 保存場景。
現在,你已經創建了第三種HDA處理器節點,也懂得了如何建立PDG服務。
接下來你可以過濾出你不需要的HDA幾何體變種。
步驟 5 - 過濾不需要的HDA幾何體變種
在這一步中,你將使用 Filter by Expression 節點 來過濾出未經光滑的版本,只保留光滑的版本。
當你在自己的工作流中想要刪除輸出的HDA幾何體變種時,此步驟很有用。
(1) 創建一個Filter by Expression 節點 ,命名為smooth_only,將其連接到 batch_cook節點之后。
Filter by Expression節點的參數將會決定哪些HDA幾何體變種會保留,而哪些將會被過濾掉。
(2) 選擇smooth_only節點,然后調節參數:
在 Filter Expression 中填 @smoothness != 1
這個表達式將會告訴節點:移除smoothness這一wedge屬性的值不為1的任何HDA幾何體變種。
Note
在這個教程中,以下都等價:
- Remove Matching Items 時的@smoothness != 1
- Remove Matching Items 時的@smoothness = 0
- Keep Matching Items 時的@smoothness = 1
(3) 對smooth_only節點進行Cook
它過濾掉了100個非光滑的版本,保留了100個光滑的版本。
(4) 選擇其中work item的圓點,觀察對應關系:
可以看到其只對應了上游節點中下半部分的work item,因為下半部分節點的smoothness屬性都是1。
(5) 保存場景
現在,你已經學會如何對HDA幾何體變種進行過濾,只保留自己想要的變種了。
接下來你將學習如何添加額外的修改。
步驟 6 - 降低最終HDA輸出的質量
在這最后一步中,你將使用另一個HDA處理器節點,它使用另一個HDA文件,將會對宇宙飛船進行一些處理。
使用這個HDA處理器節點,你將會減少幾何體面數。
當你在自己的工作流中創建模型的LOD時,這個步驟很有用。
(1) 創建一個 HDA處理器節點,命名為reduce_polygons,然后將其連接到smooth_only之后。
(2) 選擇reduce_polygons節點,對其參數做如下配置:
- 選擇HDA文件為he_polyreduce.hda
- 選擇批處理模式
- 勾選Create File Inputs
這將會告訴節點使用傳入的宇宙飛船幾何體作為輸入
- 在參數分頁,設置 Percent To Keep 為50,表示保留50%的面數
(3) 對reduce_polygons節點進行cook
(4) 查看其中的work item,注意減面的效果:
(5) 保存場景
完成
恭喜!你完成了這個教程
如果你想看最終的TOP網絡是什么樣子,你可以在Houdini安裝目錄找到場景文件:
如果想繼續學習PDG流程,你可以看Houdini文檔中的其他初學者教程,或者訪問我們網站上的Learning Path。
問題解決
1. 字符串名字末尾不容易發現的空格
將屬性的名字復制到參數中的時候,末尾多了空格,導致之后引用時沒找到。
(在屬性表中可以看到末尾有下劃線)
2. 減面節點cook錯誤
報錯:
比對了一下官方的范例文件,發現:
Scheduler節點有不一致:
修改后重新打開場景,發現沒有錯誤了
總結
以上是生活随笔為你收集整理的翻译Houdini官方文档:PDG教程之HDA处理器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Vue3+TS》开发一个自己的起始页
- 下一篇: 智慧小区三维可视化综合管理平台