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つ以上のアトリビュートを編集したい場合:
-
Python Scriptノードを追加します。Python Scriptノードは、一度に一つずつ入力ワークアイテムを編集することができます。
-
パラメータエディタで、 Evaluate Script During を Cook (In-Process) に設定します。Python Scriptノードは、ワークアイテムをクックする時に現行Houdiniプロセスで実行するようになります。
-
アトリビュートを制御するスクリプトを記述します。例:
# "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)
統計を取りたい場合(例えば、アトリビュートの平均値を取得したい):
-
Wait for Allを追加します。これは、すべてのワークアイテムが利用可能になるまで処理を停止するので、その結果として、アトリビュートにすべての値が入ります。
-
Wait for Allの後に、Python Scriptノードを追加します。
-
パラメータエディタで、 Generate When を Each Upstream Item is Cooked に、 Evaluate Script During を Cook (In-Process) に設定します。
-
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は、配列アトリビュートを単一値に減らす処理をその配列アトリビュートに適用します。 例えば、このノードを使用することで、整数/浮動小数点配列の値から、最小値、最大値、平均値、合計値を求めることができます。