On this page |
TOPネットワークパフォーマンスを可視化する方法も参照してください。
概要 ¶
TOPネットワークは、以前のクックで変更された(または、とっくに既に変更された)ワークのみを再処理することで余計なワークを最小限に抑えようと試みます。 つまり、何も変更がなければ、まったくクックされません。
TOPsでは、最新でない(またはそう疑われる)ノードを再クックする必要が出た場合に、それらのワークアイテムを“Dirty(変更あり)”としてマークする概念を取り入れています。 以下に、TOPネットワークが何を基準に再クックの有無を判断しているのかを説明しています。
-
ノードが以前のクックで生成したものと異なったワークアイテムを生成した場合、その以降のすべてのノードが“Dirty”としてマークされます。
-
外部ファイル (TOPネットワーク内で生成されていないファイル)を扱うノード、例えばFile PatternやGeometry Importを実行した時にそれらのファイルを走査して、該当するファイルに変更があった場合には、既存のワークアイテムが“Dirty(変更あり)”としてマークされます。
-
外部のHoudiniノードを参照したノード(例えば、ROP Geometry Output)を実行した時にその参照データをチェックして、そのデータに変更があった場合には、既存のワークアイテムが“Dirty(変更あり)”としてマークされます。
-
現在のところ、TOPsは入力ファイルと出力された結果ファイルをチェック しません 。例えば、中間ファイルを削除もしくは置換しても、そのファイルを入力として使用したワークアイテムは自動的に“Dirty(変更あり)”としてマーク されないです 。
-
最後のクックから変更のあったアトリビュートを持つすべてのワークアイテムが“Dirty(変更あり)”としてマークされます。
-
ノードのパラメータを変更すると、そのノードのワークアイテムが“Dirty(変更あり)”としてマークされます(その理由は、ほとんどのワークアイテムは、入力のワークアイテムとパラメータ値に基づいて生成されているからです)。
TOPノードのパラメータを変更すると(要するに、ノードを再クックさせると)、そのノードの隣のステータスアイコンが薄暗くなります:
-
手動でワークアイテム、ノード、ネットワーク全体を“Dirty(変更あり)”としてマークすることで、それらを強制的に再クックさせることができます。
クックさせる方法 ¶
To... | Do this |
---|---|
クックを必要とするネットワークの一部をクックする |
Tasks ▸ Cook Output Node を選択します。 |
(クックを必要とする場合にのみ)単一ノードをクックする |
|
強制的にHoudiniにネットワーク全体を再クックさせる |
Tasks ▸ Dirty and Cook Output Node を選択します。 |
強制的に単一ノードをクックさせる |
|
ネットワーク全体をDirty(変更あり)としてマークしつつ、まだ再クックさせない |
Tasks ▸ Dirty All を選択します。 |
すべての静的なワークアイテムを生成するも、何もクックしないようにする |
Tasks ▸ Generate Static Work Items を選択します。 |
特定のノードのワークアイテムを動的または静的で生成する |
ノードを右クリックして、 Generate Node を選択します。 |
単一ワークアイテムを再クックする |
ワークアイテムのドットを右クリックして、 Cook Task を選択します。 |
単一ワークアイテムをDirty(変更あり)としてマークしつつ、まだ再クックさせない |
ワークアイテムのドットを右クリックして、 Dirty Task を選択します。 |
ローカルスケジューラで使用されるリソースの数を制限する |
リソースを制限する方法を参照してください。 |
ファーム上でグラフ全体をクックし、現行セッションから接続解除する |
各ファームスケジューラノードには、このために Submit Graph As Job という名前のUIが備わっています。 サンプルは、HQueueを参照してください。 |
出力フラグと出力ノード ¶
コマンドラインからクックする方法 ¶
パイプラインでは、何かのスクリプトから非インタラクティブでTOPネットワークを実行させたいといったことがよくあります。
To... | Do this |
---|---|
HScriptからTOPネットワークをクックする |
% hbatch myscene.hip hbatch Version ... (Compiled on ...) help topcook topcook /tasks/topnet1 |
Pythonを使ってTOPネットワークをクックする |
% hython $HHP/pdgjob/topcook.py --hip myscene.hip --toppath /tasks/topnet1 Running Houdini ... with PID ... Loading .hip file .../myscene.hip Given Node 'topnet1', Cooking Node '..' Local Scheduler: Max Slots=..., Working Dir=... Finished Cook Work Item States: ... |
HOMからクックする方法 ¶
To... | Do this |
---|---|
HOMスクリプトでTOPネットワークをクックする |
HOMを使ってHoudiniにTOPネットワークをクックさせるには、まず親ネットワークを検索し、そのネットワーク内でOutput/Displayフラグが有効になっているTOPノードを検索し、そのノードに対してhou.TopNode.cookWorkItemsメソッドをコールします。 hou.hipFile.load(graph_file) net = hou.node('/tasks/topnet1') to_cook = net.displayNode() # PDGグラフのクックをブロックします。 to_cook.cookWorkItems(block=True) |
ファイル変更を監視しながらTOPネットワークをクックする |
上記と同様ですが、ループでファイル変更を監視しながらクックしています。 ファイルの代わりに、Perforceの変更をチェックしたり、メッセージキューをポーリング(問い合わせ)するのも良いでしょう。 単にmtimeをチェックするのではなくて堅牢なファイル監視ライブラリを使用することで、これを改良することができます。 import hou import os import time graph_file = '/tmp/doit.hip' watch_file = '/tmp/watch.txt' hou.hipFile.load(graph_file) net = hou.node('/tasks/topnet1') to_cook = net.displayNode() # 必ずネットワーク(TOPネットワークから作成されたPDGネットワーク)を初期化してください。 to_cook.cookWorkItems(block=True, tops_only=True) print('Watching for changes - Ctrl-C to exit...') mtime = os.path.getmtime(watch_file) try: while True: mtimep = os.path.getmtime(watch_file) if mtimep != mtime: mtime = mtimep # PDGグラフのクック(実行)をブロックします。 to_cook.cookWorkItems(block=True) # PDGグラフをリセットします。 to_cook.dirtyAllTasks(False) time.sleep(1) except KeyboardInterrupt: print('Finished') |
TOPネットワークのクックコントロールを任意のノードに追加する方法 ¶
TOPネットワークのクックコントロール を任意のノードに追加することで、ノードネットワーク内のそのノードからTOPネットワークのクックを制御することができます。
これは、トップレベルのネットワークとは別のノードネットワーク内のレベルに存在するTOPネットワークのクックを制御したい時に非常に役立ちます。
例:
-
TOPネットワークを含んだHDAがあって、そのHDAのインターフェースからそのTOPネットワークのクックを制御したい場合、そのTOPネットワークのクックコントロールをそのHDAに追加することができます。これによって、HDAの中に入ることなくTOPネットワークのクックを制御することができるようになります。
-
別々のレベルで複数のTOPネットワークが存在している複雑なノードネットワークがある場合、それらのTOPネットワークを表現した Nullノードを最上レベルのネットワークに追加して、それらのNullノードにTOPネットワークのクックコントロールを追加することができます。これによって、TOPネットワークのクックコントロールに素早くアクセスできるようになるだけでなく、ネットワークエディタ内のそれらの
Null
ノードにクック進捗バッジとカウントを表示させることができます。
How-to ¶
-
TOPネットワークのクックコントロールを追加したいノードを選択します。
-
Edit Parameter Interface ウィンドウを開きます。
この操作は以下のどれかで行なうことができます:
-
ネットワークエディタ内でそのノードをクリックして表示されるコンテキストメニューから Parameters and Channels ▸ Edit Parameter Interface を選択します。
-
そのノードのパラメータエディタで、 ギアメニューアイコン ▸ Edit Parameter Interface を選択します。
-
-
開かれた Edit Parameter Interface ウィンドウ内で、 Create Parameters 列 > Node Properties タブを選択します。
-
Node Properties タブ内で、 TOP Network Properties ▸ TOP Cook Controls ▸ TOP Network Cook Controls を選択します。
-
以下のどれかを実行します:
-
右矢印をクリックして、それらのパラメータを Existing Parameters 列へコピーします。
-
選択されているパラメータを Existing Parameters 列内にドラッグします。
-
-
Accept をクリックします。
すると、選択したノードのパラメータエディタ内に TOP Network Cook Controls が表示されます。 以下のパラメータセクションを参照してください。
-
TOP Network Cook Controls タブの Top Network パラメータフィールドには、クックコントロールをリンクさせたいTOPネットワークを指定します。
すると、 TOP Network Cook Controls ボタン を使用して、そこで指定したTOPネットワーク内のすべてのTOPノードのすべてのワークアイテムのクックを制御することができるようになります。
指定したTOPネットワークのクックの進捗バッジとカウント、そのTOPネットワークのすべてのワークアイテムのドットまでもが、ネットワークエディタ内のそのノードで表示されるようになります。
パラメータ ¶
Top Network
クックコントロールに関連付けるTOPネットワークのパスを指定します。
パス構文の詳細は、ノードとパラメータのパスを参照してください。
Generate Static Work Items
TOPネットワーク内のすべてのノード内に静的なワークアイテムを生成します。 どのワークアイテムもクックされず、動的ノードも何もしません。
Cook Output Node
TOPネットワーク内の出力ノードとそこに接続されているDirty(変更あり)ノードをクックします。 TOPネットワーク内の すべて のノードを再クックしたいのであれば、まず最初に Dirty All をクリックしてから、このボタンをクリックしてください。
Cancel Cook
TOPネットワーク内のノードが現在クック中の場合、それらのクックをキャンセルします。
Dirty All
TOPネットワーク内のすべてのTOPノード内のすべてのワークアイテムをDirty(変更あり)にして、それらすべてのノードが再クックを必要とすることをマークします。
Delete All File Outputs From Disk
以前のクックファイルすべてを削除してから、TOPネットワーク内のすべてのTOPノードのすべてのワークアイテムをDirty(変更あり)にします。