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

外部コンフィグレーションとデータ

TOPsで外部コンフィグレーションとソースデータを読み込んで、それを使ってワークを駆動させる方法。

On this page

概要

コンフィグレーションファイルまたは入力データもしくは両方を使ってTOPネットワークを駆動させると便利なことが多いです。 例えば、TOPネットワークを実行する際に膨大な変数が定義された設定ファイルを使用したい場合、マニフェストファイル(指示書)でリストされた役割毎またはアセット管理システムにリストされているアセット毎に1回だけTOPネットワークを実行したい場合です。

TOPsは、外部データを読み込んで、そのデータに基づいてワークアイテム/アトリビュートを生成することができます。

データを読み込む方法

  • SQLデータベース:

    SQL Inputは、データベースサーバーに対してクエリ(照会)を実行して、返された行毎に、その列のアトリビュートを使ってワークアイテムを生成します。

    SQL Outputは、入力のワークアイテムを受け取って、ワークアイテム毎に、指定したアトリビュートの列を使った行を挿入するINSERTクエリを書き出します。

  • CSV (カンマ区切りの値。典型的にはスプレッドシードによってエクスポートされます):

    CSV Inputは、CSVファイルを読み込んで、行毎にその列のアトリビュートを使ってワークアイテムを生成します。

    CSV Outputは、入力のワークアイテムを受け取って、ワークアイテム毎に、指定したアトリビュートの列を使った行を新しいCSVファイルに書き出します。

  • JSONファイル:

    JSON Inputは、JSONファイルに基づいて、アトリビュートを持ったワークアイテムを生成します。JSONは非常に自由なフォーマットなので、そのノードには、色々なデータ“形状”からワークアイテムとアトリビュートの抽出を試みるためのパラメータが用意されています。

    JSON Outputは、入力のワークアイテムを受け取って、ワークアイテムを表現したオブジェクト(アトリビュートから受け取ったキー/値のペアを含む)のリストを持ったJSONファイルを書き出します。

  • Environment Editノードは、ワークを実行させる環境にさらに環境変数を追加することができます。

データを制御する方法

  • Pythonの使い方:

    あなたがプログラミングに興味がないのであれば、データを事前処理したり既存アトリビュートを制御する最も簡単で最も柔軟な方法は、Pythonスニペットを使うことです。

    すべての入力のワークアイテムに対して1つ以上のアトリビュートを編集したい場合:

    1. Python Scriptノードを追加します。Python Scriptノードは、一度に一つずつ入力ワークアイテムを編集することができます。

    2. パラメータエディタで、 Evaluate Script DuringCook (In-Process) に設定します。Python Scriptノードは、ワークアイテムをクックする時に現行Houdiniプロセスで実行するようになります。

    3. アトリビュートを制御するスクリプトを記述します。例:

      # "detail"アトリビュートに"low", "medium", "high"などの文字列を設定するデータを取り込んだとします。
      # そして、そのデータを-1, 0, 1といった数値に変換したいとします。
      
      # 文字列値と数値をマップさせた辞書を定義します。
      lookup = {"low": -1, "medium": 0, "high": 1}
      # "detail"文字列アトリビュートの値を取得します。
      detail = work_item.intAttribValue("detail")
      # 文字列を該当する数値に変換します。
      level = lookup.get(detail, 0)
      # 該当する数値が設定された新しい"level"アトリビュートを生成します。
      work_item.setIntAttrib("level", level)
      

    統計を取りたい場合(例えば、アトリビュートの平均値を取得したい):

    1. Wait for Allを追加します。これは、すべてのワークアイテムが利用可能になるまで処理を停止するので、その結果として、アトリビュートにすべての値が入ります。

    2. Wait for Allの後に、Python Scriptノードを追加します。

    3. パラメータエディタで、 Generate WhenEach Upstream Item is Cooked に、 Evaluate Script DuringCook (In-Process) に設定します。

    4. Scriptの中でparent_itemを使えば、Wait for Allノードから単一ワークアイテムを参照することができます。このワークアイテムには、パーティション内のワークアイテムにアクセスするのに使用可能なpartitionItemsリストアトリビュートが入っています:

      # 入力のWait for Allのパーティション内のワークアイテムを取得します。
      items = parent_item.partitionItems
      # "scale"アトリビュートの平均値を計算します。
      total = sum(it.floatAttribValue("scale") for it in items)
      average = total / float(len(items))
      # 出力されるワークアイテムに対して、この平均値をアトリビュートとして設定します。
      work_item.setFloatAttrib("average", average)
      
  • 別の方法として、TOPノードを使ってアトリビュートを制御することができます:

    Attribute Create。 このノードを使えば、アトリビュートを追加したり 再定義 することができ、エクスプレッションを使用することで、既存アトリビュートに基づいて新しいアトリビュートの値を計算することができます。

    Attribute Copyは、あるブランチ内のワークアイテムのアトリビュートを、インデックスまたはアトリビュート値でワークアイテムをマッチングさせて他のブランチのワークアイテムに複製します。

    Attribute Deleteは、ワークアイテムからアトリビュートを削除します。 これは、例えばCSVに出力する前に“スクラッチ(書きかけ)”のアトリビュートがディスクに書き出されないようにするのに役立ちます。

    Attribute from Stringは、入力文字列のコンポーネントを解析してアトリビュートを生成します。 このノードは、ファイルパスからフレームまたはショットの情報を抽出したり、CSVまたはJSONの入力ノードで読み込まれた文字列データを解析するのに役立ちます。

    Attribute Reduceは、配列アトリビュートを単一値に減らす処理をその配列アトリビュートに適用します。 例えば、このノードを使用することで、整数/浮動小数点配列の値から、最小値、最大値、平均値、合計値を求めることができます。

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

基本

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

次のステップ

リファレンス

  • すべてのTOPsノード

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

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

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

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

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

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

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

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

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

  • Python API

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

  • Job API

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

  • ユーティリティAPI

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