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

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

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. パラメータエディタで、 Evavluate In Process を有効にします。

    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. パラメータエディタで、 Work Item Generation を"Dynamic"に設定し、 Evaluate In Process を有効にします。

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

      # 入力のWait for Allのパーティション内のワークアイテムを取得します。
      items = part.partitionItems
      # "foo"アトリビュートの平均値を計算します。
      total = sum(it.floatAttribValue("foo") 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の入力ノードで読み込まれた文字列データを解析するのに役立ちます。

タスクを実行する方法

基本

次のステップ

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

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