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

フィードバックループ

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

On this page

概要

TOPs Feedback Loopブロックは、一連の 直列による実行 工程を 何回も 実行することができます。

TOPネットワークは既になんというか並列ループのような挙動をしています。 というのも、TOPネットワークはスケジューラの設定に基づいて可能な限り同時にたくさんのワークアイテムを実行します。 つまり、"入力別に同じアクションを繰り返す"挙動はまさにTOPネットワークの挙動そのものなので、通常ではループを構築する必要がありません。

とはいえ、場合によっては並列ではなく直列に一連の工程を実行して、前のワークアイテムの出力をそれ以降のワークアイテムの入力として使用したいことがあります。 単純なシミュレーションなら、このような処理は既にROP Fetchノードを使えば制御することができます。このROP Fetchは同時に1ジョブ1フレームとして実行するバッチを生成することができます。 複数のノードが絡んだループまたはループさせる回数がまだわからないといったもっと複雑な使い方になると、 フィードバックループ を使用した方が良いです。

フィードバックループのブロック内では、TOPネットワークはノード毎にワークアイテムを実行するのですが、下流のワークアイテムが上流のワークアイテムに依存した状態で、それらのワークアイテムを直列に実行します。 そして、1回目のループですべてのワークを完了させた時に、そのブロックに2回以上のループ回数が指定されていれば、Beginノードに戻って次のループに進みます。

Tip

設定によっては、フィードバックループのブロックは、並列で 複数の直列ループ を実行する こともできます

例えば、1回づつ一握りのビー玉を瓶に詰めていくRBDシミュレーションを想像してみてください。 この処理全体を単一シミュレーションで実行することができますが、瓶の底に積み上がっていくビー玉は安定せず、次々にシミュレーションされるオブジェクトの数が増え続けていきます。 これを管理する1つの方法は、1回目に詰める一握りのビー玉に対してRBDシミュレーションを実行し、その結果を2回目のシミュレーションの静的オブジェクトとして使用することです。 3回目のシミュレーションでは、1回目と2回目のシミュレーションの結果を合わせたビー玉を静的オブジェクトとして使用します。それ以降のシミュレーションも同様です。 TOPsでは、ROP GeometryとFeedback Loopをループブロック内で使用することで、このような処理が可能になります。

(Feedback Loopはコマンドサーバーチェーンの実装でも使用します。その場合、1回づつコマンドをサーバーに順々に送信してください。)

How to

To...Do this

Feedback Loopブロックを作成する

  1. TOPネットワークエディタで⇥ Tabを押して"For-Loop with Feedback"を選択します。

    このツールはBlock Begin FeedbackノードとBlock End Feedbackノードを配置します。

  2. Block Begin Feedbackノードを選択します。パラメータエディタで、反復回数の指定方法を選択します:

    • デフォルトでは、 Iterations パラメータで指定された反復回数だけループが実行されます。Block Begin Feedbackノードに上流のワークアイテムが接続されていれば、その入力のワークアイテム毎にiterations回だけループが実行されます。

      例えば、指定した反復回数でシーンを何回も構築していくようなループ(例えば、概要で説明した"ビー玉を瓶に落とす方法")で使います。 Block Begin FeedbackノードにWedgeノードを接続すれば、そこから生成されたワークアイテム毎にループを繰り返すことができます。

    • Block Begin Feedbackノードに静的なワークアイテムが含まれていれば、 Iterations from Upstream Items を有効にすることができます。これは、反復回数に上流のワークアイテムの数を設定します。これによって、入力のワークアイテム毎に1回だけブロック内の一連の工程が繰り返されます。

      例えば、ディレクトリ内のすべてのファイルをリストするFile Patternノードとそのファイル毎に反復するループブロックを使用することで、その内容を一時ファイルに追加していくことができます。

  3. Block Begin Feedbackノードが動的にワークアイテムを生成する場合、Block End Feedbackノードの Use Dynamic Partitioning も有効にしなければなりません。

  4. そのBeginノードとEndノードの間にノードを接続することで、それらのノードをループの一部にすることができます。

    このループを可視化するために、Houdiniはブロック内のノードを囲んだ境界を描画します。

ループ内のワークアイテムに基づいて"副タスク"を並列でクックする

ループ内のノードからループ外のプロセッサに接続した場合(つまり、ループのEndノードに接続しなかった場合)、そのプロセッサのワークアイテムは、ループ内のワークアイテムに基づいて生成されるようになりますが、 通常通りに並列でスケジュールが組まれるようになります。

これは、ループ内のワークアイテムに基づいているもののループさせる必要のない"副タスク"で役立ちます。 例えば、ループ内では画像を生成してからその画像を制御していきたいような場合では、ループ外ではその生成された画像のサムネイルを並列で生成することができます。

Tipsとメモ

  • フィードバックループにはどのプロセッサノードも使用することができます。とはいうものの、現在のところ、フィードバックループ内では動的なパーティショナまたはマッパーを使用することは できません 。パーティションに同じループ回数目からのワークアイテムのみを含める場合であれば、 静的な パーティショナーを使用することが できます 。別のループ回数目のワークアイテムを無理やりパーティション化すると、そのパーティションノードはエラーを報告します。

  • ブロックのBeginノードとEndノードは、その関係性をわかりやすくするために同じカラーを設定してください。For-Loopツールで配置されたデフォルトのノードのカラーはオレンジですが、そのノードのカラーを変更することができます。これは特に入れ子化したループと区別するのに役立ちます。

    ブロックを囲んだ境界は、Endノードのカラーと同じになります。

  • Beginノードは、ループさせるワークアイテムを生成するプロセッサです。

  • 各ワークアイテムは、同じループの前のワークアイテムに依存し、その反復回数とループ番号を識別するためのアトリビュートを持っています。

    Block End Feedbackノードは、関係しているループの反復に基づいてワークアイテムをパーティション化するパーティショナーです。 フィードバックループ内のノードは自由に必要な数だけワークアイテムを追加していくので、パーティショナーはそれらのワークアイテムを収集することができて便利です。 Beginノード内の2回目のループのワークアイテムは、1回目のループのパーティションに依存します。それ以降のループも同様です。 ループが動的にワークアイテムを生成する場合、そのBlock End Feedbackノードの Use Dynamic Partitioning も有効にしなければなりません。

  • フィードバックブロック外のノードを、フィードブロック内の複数入力を持ったノードに接続することができます。

タスクを実行する方法

基本

次のステップ

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

    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パッケージのクラスと関数。