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

サービスブロック

サービスブロックは、共有サービスプロセスを使用して実行するワークアイテムのセクションを定義することができます。

On this page

概要

サービスブロックは、PDGサービスフィードバックループを組み合わせて使用します。 サービスブロックは、反復回数が固定された1個以上のループを作成し、サービスワーカープロセスをそのループに割り当てます。 サービスプロセスはそのループ内でロックされ、そのループが完了するまではグラフ内の他のワークアイテムで使用されなくなります。 そのループ内の反復は、クックがBeginノードから始まりEndノードで終わる深さ優先順で逐次クックされていきます。

ブロック内のPDGサービス互換のノードの Cook Type ドロップダウンメニューを Service に変更し、そして、 Run on Service Block パラメータを有効にすることで、 そのループに割り当てられているサービスプロセス上でそのノードが実行されるように構成することができます。 Command Send TOPノードは常にそのノードを含んだサービスブロック上で実行されます。 Attribute CreateFile Patternなどの他のノードは従来通りに実行されますが、それらのワークアイテムは、そのループで課せられた深さ優先のクック順に従います。

PDGには、いくつかのビルトインのサービスブロックが含まれています

How to

サービスブロックの作成

  1. TOPネットワークエディタ内で⇥ Tabを押して、 Maya Service Block TOPHoudini Service Block TOPなどの サービスブロック ツールを選択します。

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

  1. Block Beginノードを選択します。パラメータエディタで、セッションの数を指定する方法を選択します:

    • セッションの数は、ブロック内の各ループが持つワークアイテムの数を決めます。 デフォルトでは、 Number of Sessions パラメータで指定された反復回数だけ実行されます。 Beginノードに上流のアイテムが存在すれば、このブロックは、入力のワークアイテム毎にsession_countサイズのループを作成します。

    • Session Count from Upstream Items を有効にすることで、上流アイテム毎に1回の反復の単一ループを作成することができます。

    • 同じループから複数のセッションが直列でクックされます。つまり、ブロックは、最初のセッションを上から下までクックした後に次のセッションを開始します。

      • 異なるループからのセッションは並列で実行することができます。

  2. Block Beginノードと Service Block Endノードの間にCommand Sendノードを接続して、そのノードをループの一部にします。

    • このCommand Sendノードは、スクリプトコードをサービスプロセスに送信することができます。

  3. サービスブロックのタイプによっては、そのブロック内で他のサービスベースのノードを実行することができます。

    • 例えば、このブロックがHoudiniサービスを使用している場合、そのブロック内にHDA ProcessorROP Fetchを含めることができ、そのノードを共有サービスプロセス上で実行するように構成することができます。

    • そのサービスを使用して実行できない他のノードを含めることができ、その場合は、通常のスケジューリングワークフローが使用されます。

Houdiniは、ブロック内のノード周辺に境界を描画して、そのブロックを可視化してくれます。

Shared Server (廃止)

Houdini19.5までは、サービスブロックは、 Shared Server という独自のサーバーシステムを使用していました。 この機能は今では廃止されましたが、古いファイルと互換性を保つためにサービスブロックがShared Serverを使用するように設定することが今でも可能になっています。

Server Type パラメータを Service の代わりに Shared Server に変更することで、サービスブロックがShared Serverを使用するように切り替えることができます。

考慮すべきいくつかの主な違い

  1. サービスと違って、Shared Serverは、Command Send TOPノードを使用して生成されたワークアイテムしか実行できません。

    • サービスブロック内に他のタイプのノードを含めることはできますが、それらのノードは通常のスケジューリングワークフローを使用してワークアイテムを実行します。

    • サービスを使用するブロックは、そのブロックに割り当てられているサービスと互換性のあるどのタイプのワークアイテムも実行することができます。 例えば、 Houdini Service Block は、Command Sendだけでなく、Python ScriptHDA ProcessorROP Fetchのワークアイテムも実行することができます。

  2. Shared Serverは、ファーム上での使用には適していません。

    • 長時間実行型サーバープロセスは、ファームインターフェースを使用して管理することができないので、問題が発生した時にそれらのタスクをデバッグしたり強制終了させるのが困難です。

    • Shared Serverプロセスはスケジューラ設定の恩恵も受けません。

メモ

  • Beginノードは、サービスワーカープロセスをブロック内にロックするワークアイテムを生成します。これによって、グラフ内の他のワークアイテムがそのブロックで実行されているオペレーションに干渉しないようにすることができます。

  • ブロックの最後のEndノードのワークアイテムが評価されると、サービスワーカーはロック解除されます。その時点より前にグラフがキャンセルまたはクックが停止されると、ロックされているすべてのサービスプロセスがロック解除されます。

  • Beginノードの Reset Service パラメータでは、サービスプロセスの状態が各ループの反復の開始時にリセットされるように設定することができます。

  • 各サービスプロセスの状態は、PDG Servicesリストを使用して検査することができます。

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

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

サンプル

以下のディレクトリには、HoudiniサービスブロックとMayaサービスブロックの使い方について説明したHIPファイルのサンプルが入っています。

  • $HFS/houdini/help/files/pdg_examples/top_houdinipipeline

  • $HFS/houdini/help/files/pdg_examples/top_mayapipeline

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

基本

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

次のステップ

リファレンス

  • すべてのTOPsノード

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

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

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

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

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

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

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

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

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

  • Python API

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

  • Job API

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

  • ユーティリティAPI

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