Houdini 18.0 タスクを実行する方法

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

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

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)のメリットを利用した特定のワークフローにおいて、特定の基準に基づいてワークアイテムをグループ化しつつ、結合された単一パーティションアイテムではなくて、そのグループ化されたワークアイテムに対して処理を継続したい時に役立ちます。

タスクを実行する方法

基本

次のステップ

  • 外部のプログラムを実行する方法

    TOPノードで外部機能をラップする方法。

  • ファイルタグ

    ワークアイテムは、そのワークによって生成された"結果"を追跡します。各結果には、そのタイプのタグが付きます。

  • フィードバックループ

    For-Eachブロックを使用することで、ワークアイテムに対して一連のオペレーションをループで処理することができます。

  • コマンドサーバー

    コマンドブロックは、リモートプロセス(例えば、HoudiniやMayaのインスタンス)を起動したり、サーバーコマンドを送信したり、サーバーをシャットダウンすることができます。

  • PDG Service Manager

    PDG Service Managerは、ワークアイテムのクック時間を短くするために使用される持続型Houdiniセッションのプールを管理します。

  • PDGとレンダーファームスケジューラの統合

    異なるスケジューラを使って、ワークのスケジュールを組んで実行する方法。

  • ワークアイテムのパフォーマンスの可視化

    ネットワーク内のワークアイテムの相対的なクック時間(またはファイル出力サイズ)を可視化する方法。

  • Event Handling

    PDGノードまたはグラフからイベントを制御するためのPython関数を登録することができます。

  • Tipsとテクニック

    TOPsを扱う上で役立つ一般情報と上手な使い方。

リファレンス

  • すべてのTOPsノード

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

  • Processor Node Callbacks

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

  • Partitioner Node Callbacks

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

  • Scheduler Node Callbacks

    Scheduler系ノードはワークアイテムを実行します。

  • Python API

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