Houdini 19.5 PDG/TOPsを使ってタスクを実行する方法

上流の結果を待機する方法

他のジョブを開始させるためにどのジョブが完了していなければならないのかをネットワーク内で表現する必要性がよくあります。

On this page

概要

TOPネットワークでは、一部のワークアイテムを他のジョブに 依存 させることができます。 つまり、1番目のワークアイテムが完了しないと2番目のワークアイテムを開始できないようにすることができます。 この2番目のワークアイテムのことを、 親ワークアイテム に依存した ワークアイテムと呼びます。

  • プロセッサ系ノードを使って入力のワークアイテムから新しいワークアイテムを生成した場合、その新しいワークアイテムは自動的に入力のワークアイテムに依存します。

  • 下流のワークアイテムを上流のワークアイテムに依存させたり(例えば、ジオメトリが生成された後にシミュレーションフレームを計算するようにさせることができます)、あるワークアイテムを同じノード内の他のワークアイテムに依存させることができます(例えば、シミュレーションを生成する時に、前のフレームが完了するのを待ってから次のフレームを計算するようにさせることができます)。

(上級者向けTip:依存する側のワークアイテムは必ずしも、依存される側のワークアイテムから生成させる必要はありません。マッパー系ノードを使用することで、好きなように依存関係を構築することができます。)

パーティショナーが必要となるのは、ノードが明らかに膨大な量のワークを生成する時です。 動画を生成する場合を例にすると、フレーム毎に別々のワークアイテムを生成するのではなくて、 1個 のワークアイテムを生成しないといけません。 つまり、動画変換ノードの前にWait for Allノードが必要になります:

ディペンデンシー(依存関係)の作り方

パーティショナー 系ノードを使って、ネットワークに依存関係(つまり、次の工程に進む前に上流のワークアイテムが完了するのを待機しなければならない場所)を“教える”必要性が多々あります。

Wait for All

入力のワークアイテムすべてが完了するのを待ちます。これは、(次の工程で、すべての入力が準備完了になっている必要がある時に)“パイプライン”の工程の最後によく使用します。 例えば、動画ファイルを生成するには、すべてのフレームのレンダリングが完了するのを待機しなければなりません。

すべての上流のブランチを収集するためにネットワーク全体の最後に(場合によっては一部の通知系ノードの前に)Wait for Allを使用することが非常に多いです。

Partition by Frame

同じフレーム番号の入力ワークアイテムすべてが完了するのを待ちます。 これは、入力フレームから並列でワークを生成し、それらの中間結果を“最終”フレームに結合する必要があるようなレンダリングとシミュレーションのワークフローで主に使用します。

Partition by Attribute

特定のアトリビュートの同じ値を持った入力ワークアイテムのグループを待ちます。 これを使用すれば、アトリビュートによって好きなようにパーティションをセットアップすることができます。

例えば、File Patternを使って膨大なファイルパスを取得してから、特定のサブ文字列を共有したパスをグループ化することができます。

パーティションアイテム

パーティショナー系ノードは、入力のワークアイテムセット(パーティションアイテムが待機するワークアイテム)に依存した新しいワークアイテムを生成します。 これらのパーティションは、必ずしも排他的である必要はありません。 つまり、同じ入力のワークアイテムに依存したパーティションアイテムを複数生成することができます。

入力のワークアイテムから生成されたワークアイテムがその入力のワークアイテムのアトリビュートを継承するのと同様に、 パーティションアイテムでも、その入力のワークアイテムのアトリビュートをリストに まとめて 継承します。 これは、例えば、入力のノードの数値アトリビュートのリストを合算または平均するような特定のワークフローで役立ちます。

パーティションからワークアイテムを抽出する方法

実際には、パーティションワークアイテムは、まとめられたワークアイテムを含んだ“グループ”ではありません。 しかし、Work Item Expandノードを使用することで、それがグループであるかのようにワークアイテムを抽出することができます。

これは、パーティション系ノード(例えば、Partition by Attribute)のメリットを利用した特定のワークフローにおいて、特定の基準に基づいてワークアイテムをグループ化しつつ、結合された単一パーティションアイテムではなくて、そのグループ化されたワークアイテムに対して処理を継続したい時に役立ちます。

PDG/TOPsを使ってタスクを実行する方法

基本

初心者向けチュートリアル

次のステップ

リファレンス

  • すべてのTOPsノード

    TOPノードは、データをネットワークに送り込んでワークアイテムに変換し、色々なノードでそれを制御するワークフローを定義します。たいていのノードは、ローカルマシンまたはサーバーファーム上で実行可能な外部プロセスを表現しています。

  • プロセッサ系ノードコールバック

    プロセッサ系ノードはスケジューラで実行可能なワークアイテムを生成します。

  • パーティショナー系ノードコールバック

    パーティショナー系ノードは複数の上流ワークアイテムを単一パーティションにグループ化します。

  • スケジューラ系ノードコールバック

    スケジューラ系ノードはワークアイテムを実行します。

  • 独自のファイルタグとハンドラー

    PDGはファイルタグを使用して出力ファイルのタイプを決めます。

  • Python API

    ディペンデンシーグラフを扱うためのPython PDGパッケージのクラスと関数。

  • Job API

    ジョブスクリプトで使用するPython API

  • ユーティリティAPI

    Python pdgutilsパッケージのクラスと関数は、PDGノードでの使用だけでなく、スクリプトやプロセス外のジョブスクリプトでの使用も想定されています。