翻译Houdini官方文档:PDG/TOPs介绍
官方文檔:Introduction to TOPs
- 總覽
- 使用TOPs工作
- TOP節點UI
- Processors(處理器)
- Mappers
- partitions(分割)
- Schedulers(調度器)
- 簡單的TOP網絡例子
- Work items
- Attributes(屬性)
- 靜態 與 動態
- Managing jobs
- PDG scheduling
- In-process vs. out-of-process
總覽
通過構建TOP節點的網絡,你可以指定要完成什么工作,以及怎樣操縱這些工作的結果。TOP節點會生成 工作項(work item) ,它們將會完成特定任務和(或)在屬性(attributes)中存儲信息。
有多種TOP節點,但是主要的兩種類型是:
- 處理器(processor) 型節點將生成新的work item。
- 分割(partition) 型節點將創建work item之間的依賴關系,所以它們將會等待直到partition中所有work item都完成。
一個TOP節點網絡可看做是一個菜譜,其中包含:
- 生成work item
- 在processor中高效運行它們(在單個機器中或者渲染農場中)
- 指出依賴關系,以便可以盡可能地并行。
這個菜譜 就是所謂的PDG(Procedural Dependency Graph,程序化依賴網絡)。它描述了需要完成的work item以及它們之間的依賴關系。
例如,現在要制作一個城市,這其中包含了多個work item,它們之間也有依賴關系。通過建立它們依賴網絡,TOPs可以:
- 找到更高效的方式來cook出它的最終結果。
- 當有變化時,它可以找到最少的 必要的工作。因為你已告訴了它依賴關系,它可以判斷出哪一部分依賴于變化的東西。
作為Houdini的一部分,TOPs致力于高效地完成任務,例如:仿真模擬、渲染、合成。
然而,它通用于任何可以劃分為獨立項目并有依賴關系的任務。
使用TOPs工作
TOP節點UI
關于界面的更多信息,可見PDG node network interface
Processors(處理器)
Processors可以生成新的work item。
基于傳入的work item ,Processors可以生成多個work item。(一生多又稱為“fan-out”)
一個Processor節點——
- 既可以根據節點參數從零創建work item。
- 也可以基于輸入節點傳來的work item來生成新的。
許多節點同時以這兩種方式工作。
一個Wedge節點如果沒有輸入,則會根據參數中指定的Wedge的數目來生成work item;如果有輸入,則創建的work item的數目將是Wedge的數目乘以輸入節點傳來的work item數目。
當Processor創建work item是基于一個“父項”來創建一個“子項”時,它將會傳遞“父項”的屬性。因此work item可以將結果順流而下傳遞。
Mappers
Mappers為網絡中原本不相關的work item之間建立依賴關系。在正常情況下,它們通常是不必要的。
使用的情況例如:
- 你在兩條不同的節點鏈中創建任務,但你想要告訴系統:其中的一條鏈上的任務實際上依賴于另一條鏈上的任務完成。
partitions(分割)
partition節點將基于多個不同的標準把輸入的work item們組合在一起。PDG以這樣的方式將任務中的多個“碎片”組合為一個“整體”以供后續處理。(多生一又稱為“fan-in”)
不同partition節點將以不同的方式組合上游的work item。
partition有兩個效果:
- 它在分組的work item之間創建依賴關系,因此該partition直到組中的所有work item都完成后才能繼續處理。
- 它(可選地)將分組的work item的屬性進行合并。例如,所有從partition創建的work item都將接收這一組的合并的輸出文件路徑,作為他們的輸入屬性。
最常用的partition節點是 Wait for All 。它將所有輸入的work item都組合為一個partition,導致必須等待所有上游的work item都完成之后,才能繼續前進。
你可以基于不同的標準來做partitions,例如:
- 基于屬性。比如將同一幀的所有任務都組合為一組。
- 基于自定義的函數。
- 基于空間。比如當你在地形上散布樹木的時候,你可以將地形劃分為網格,然后將一個小塊上的所有項目都組合到一起。
就其本身而言,partition節點中的項目不會做任何工作,它們僅僅是保存著一組work item的合并信息,使得后續的操作可以操作合并的信息。
Schedulers(調度器)
Scheduler節點是實質上負責運行work item中可執行內容的。
- 不同的Scheduler類型代表了運行可執行內容的不同方法。例如:Local Scheduler 使用本地機器的線程池,而 HQueue Scheduler 將可執行內容放在了HQueue渲染農場中。
- 你可以在一個TOP網絡中有多個Scheduler節點,從而可以根據情況將網絡設置為以不同的方式進行Cook(例如,測試時使用本地機器,夜間時使用農場)
TOP網絡默認的Scheduler將在參數中指定:
簡單的TOP網絡例子
下面簡單的圖示描繪了一個基本的網絡,它的目標是以不同的質量級別來渲染出動畫的五幀,并將每一幀的不同質量的圖拼接合并,以此來創建對比圖,使我們可以更方便觀察出不同質量的區別。
參閱常用TOP節點來獲取更多信息。
Work items
TOP網絡中的每個Processor節點都會生成一定數量的work item。 一個節點所創建的work item可以從界面中節點的內部看到(有關更多信息,請參見PDG node network interface)。
許多work item代表著某種“作業(Job)”,即在單臺計算機或渲染農場中的進程中運行的腳本或可執行文件。 但是,也有些work item的存在只是為了保存屬性而存在,實際上并不需要完成工作。
例如:
- HDA Processor 節點創建的work item代表著一項工作:他們對輸入的一個HDA文件進行Cook。
- 而 File Pattern 節點創建的work item只是保存一個匹配的文件路徑,是下游的處理器需要根據這些文件名進行一些操作。
Attributes(屬性)
work item包含著屬性,它們就是信息,類似于Houdini幾何圖形上的屬性(比如一個點上的屬性)。 與work item關聯的腳本或可執行文件可以讀取屬性,以此來控制其執行的工作。 屬性將從“父項”傳遞下來,因此你可以使用屬性使work item的結果影響其“子項”、對子項進行分組的partition、并通過網絡向下傳遞信息。
雖然,可以寫自定義的節點來讀取屬性并控制work item的生成。
然而,屬性最常見的用法還是——在“TOP網絡中”或“TOP引用的外部Houdini網絡中”的節點的參數中,引用屬性。例如:
- 你想使用不同的渲染質量。可以使用 Wedge節點 來創建名為pixelsamples的屬性為不同值的work item。 然后,在ROP Mantra Render 節點中,就可以寫 @pixelsamples 這樣的字符串來引用先前的屬性,并將其值設置到 Pixel samples 參數中。
- 你還可以在TOP網絡調用的外部資產/網絡中引用work item的屬性。 例如,HDA Processor為每個work item進行Cook。 你可以在HDA的參數中使用 @attribute 來引用從work item中提取的值。
你可以使用 @attribute.component 來引用向量的一個分量,其中 component 是從0開始的數字,或者x、y、z(分別等于0、1、2)。 例如 @pos.x 或 @pdg_output.0 。 你還可以使用pdgattribvals將屬性數組的所有組件引用為以空格分隔的字符串。
節點,以及自定義的節點可以加任意的屬性。
而work item還有一些內建的屬性,可以在任何情況下訪問。
詳見 Using attributes
靜態 與 動態
靜態:
有一些work item在TOP網絡開始運行之前,就已經基于節點的參數計算出需要的數目了,這些被稱為靜態的 work item。
例如,對于一個沒有輸入的ROP Mantra 節點,它會為每一幀創建一個用于渲染的work item。渲染的幀數將在參數中設定。所以work item的數目可以在提前就知道。
如果節點會為每一個傳入的work item創建一個新的work item,則這些work item也被視為是靜態的。
電影的工作流往往是基于“幀”的,由于提前知道幀數,所以往往生成靜態的work item。
動態:
有時,work item只有在運行時才會被生成,他們被稱為動態的 work item。
游戲和特效的工作流通常更具動態性。 例如,基于人群代理的輔助模擬可能會根據每個圖塊中有多少代理,將人群劃分為圖塊,而這只有在運行時生成人群模擬并讀取文件后才能完成。
- 一般經驗——靜態勝于動態:因為work item的數量是可見的,所以你可以了解要完成的工作量,而Houdini可以給出更準確的完成百分比估算。
- 然而,根據工作流程,動態的 work item 是不可避免的,實際上,幾乎整個網絡都可能是動態的。例如,在一個游戲工作流程中,你從曲線生成一個關卡,你不知道需要多少的運算量,因為你的曲線可能會與其他曲線相交,曲線可能會與圖塊相交等等。
- 在某些情況下,Houdini無法分辨工作是否是靜態的,于是為你提供動態還是靜態的選擇。在這種情況下,標記為動態始終是安全的,因為TOP網絡始終可以在運行時確定需要哪些work item。但是,如果已知work item是靜態的,則將節點標記為靜態的可以獲得作為靜態項的優勢。
- Wait for All 節點 可以將動態數目的work item轉變為靜態的數目(1個),其他的partition節點也可以將動態數目轉變為靜態數目。這些情況都應該被自動設置,而非手動設置。
- 某些processor 節點具有“ Work item generation”菜單,可讓您選擇“靜態”,“動態”或“自動”(“自動”表示“如果此節點能夠靜態生成,或者沒有輸入,則生成靜態”)。 如果processor只能動態工作或只能靜態工作,則它們將缺少此選項。
- 一些partition節點具有一個稱為“Use dynamic partitioning”的參數。 當partitions取決于動態生成的信息時,將其打開。 如果partitions僅取決于最接近的上游靜態work item中“已知”的信息,則將其關閉,在這種情況下,就可以靜態計算partition。(如果節點的工作方式只能動態或只能靜態,則節點可能不提供此選項。)
提示:
如果你的TOP網絡中沒有緩存結果(節點內沒有work item),則可以在網絡編輯器中選擇“ TOP”?“ Generate Static Work Items”以生成所有靜態已知項。 這通常可以幫助你了解網絡中涉及多少工作,而不用實際進行Cook。
Managing jobs
官方文檔缺失,todo。
PDG scheduling
In-process vs. out-of-process
總結
以上是生活随笔為你收集整理的翻译Houdini官方文档:PDG/TOPs介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 应用程序无法正常启动(0xc000007
- 下一篇: python中的scipy基础知识_py