タスクを実行する方法TOPの紹介TOPネットワークの背後にある基本的な概念とTOPネットワークでできる事について説明しています。できるだけ並列でたくさんのワークアイテムを実行できるように依存関係を解決します。街を生成するワークフローを例にすると、地形の生成、道路のレイアウト、多種多様なビルのアセットの配置、樹木の配置、標識やベンチといった街頭設置物の配置などが必要になります。これらの工程のいくつかは並列で処理することができ、他の工程は特定の工程が完了するまで処理を開始することができません。手動で記述したスクリプトを使って街の生成を自動化しようとした場合、おそらく、それらの工程を別々の"パス"(地形の生成、道路のレイアウト、ビルの配置など)に分けることになるでしょう。この方法だと、ほぼ間違いなくパス内およびパス間で並列で実行できる機会を見逃してしまうので、本当はまったくといって非効率です。地形の特定のタイルの処理が終われば、他のタイルの処理が完了するのを待つことなくそのタイルに対して道路のレイアウトや樹木の配置を始めることができるはずです。最終出力を生成するのに必要なすべての作業間で依存関係のネットワークを構築することで、TOPsはもっと効率の良い方法を探して街のレシピを"クック"することができます。何かしらの変更があった時でも、TOPsはその変更のあった情報に依存している部分を把握しているので、その街の"再クック"に必要となるワークを最小限で実行することができます。依存関係を持たせた状態で個々のワークアイテムに分解可能な作業でも役立ちます。TOPノードのネットワークを構築することによって、処理させたいワークを指定し、その結果を制御する方法を指定します。TOPノードは、ワークを実行するワークアイテムを生成したり、アトリビュートに情報を格納します。プロセッサは新しいワークアイテムを生成し、パーティションはそのパーティション内のすべてのワークアイテムが完了するまで待機できるようにワークアイテム間に依存関係を生成します。このノードから生成されたワークアイテムは、TOPネットワーク内のノードボディ内部で表現されています(詳細は、以下のネットワークインターフェースを参照してください)。ほとんどのワークアイテムは"ジョブ"を意味しています。単一コンピュータまたはレンダーファームのどちらかのプロセスで実行させるスクリプトまたは実行ファイルを指します。一部のワークアイテムは単にアトリビュートを保持するためだけに存在していて、実際には何のワークも処理しません。これらのワークアイテムは入力ファイルに対してHoudiniアセットをクックします。Patternノードが生成したワークアイテムは、単にマッチした各ファイルパスのホルダーにすぎません。そこから下流にあるプロセッサノードのワークアイテムによって、それらのファイル名を使って何かを処理する必要があります。ワークアイテムに関連付けられているスクリプトまたは実行ファイルにそのアトリビュートを読み込ませることで、そのワークの処理を制御することができます。ワークアイテムをまとめてグループ化したり、ネットワークを通じて情報を渡すことができます。異なるレンダー品質を試行錯誤したいとしましょう。TOPを使用してpixelsamplesアトリビュートに異なる値を設定したワークアイテムを生成することができます。パラメータでそのアトリビュートを参照できるように@pixelsamplesを設定することができます。他にも、TOPネットワークからコールされた外部のアセット/ネットワークのワークアイテムアトリビュートを参照することができます。Processorはワークアイテム毎にHoudiniアセットをクックすることができます。そのアセットのパラメータに@attribute参照を使用することで、そのワークアイテムから値を引き出すことができます。@attribute.componentを使ってベクトルのコンポーネントを参照することができます。@pos.xまたは@pdg_output.0です。カスタムコードは任意でアトリビュートを追加することができますが、ワークアイテムにも常にアクセス可能なビルトインのアトリビュートがいくつか用意されています。詳細は、アトリビュートの使い方を参照してください。プロセッサ、パーティション、マッパープロセッサプロセッサは新しくワークアイテムを生成します。既存のワークアイテムに基づいて複数の新しいワークアイテムを生成("fan-out:分散")することができます。プロセッサノードは、ノードのパラメータに基づいてゼロから新しいワークアイテムを生成することができます。入力ノードのワークアイテムから新しくワークアイテムを生成することができます。ほとんどのノードはどちらの方法でも動作することができます。Wedgeノードに何も入力がなければ、そのパラメータで指定されたWedgeの数だけワークアイテムが生成されます。入力があれば、その入力のワークアイテムの数とWedgeの数を乗算した数だけ新しくワークアイテムが生成されます。パーティションパーティションノードは、色々な基準に基づいて入力のワークアイテムをまとめます。これこそ、PDGが今後の処理用に複数のワークを単一ワークにまとめる("fan-in:結合")方法になります。パーティションノード別に異なる方法で上流のワークアイテムをまとめることができます。パーティション化には2つの効果があります:パーティションは、グループ化したワークアイテム間に依存関係を生成するので、そのグループ内のすべてのワークアイテムが完了するまでは処理を継続しません。(オプションで)パーティションは、グループ化したワークアイテムのアトリビュート値を結合します。パーティションから生成されたワークアイテムは、グループ化したワークアイテムから集まったoutputファイルパスのリストをinputアトリビュートとして受け取ることになります。単一パーティションにグループ化するので、上流のワークアイテムすべてが完了するのを待ってから、そのパーティションを継続させることができます。アトリビュートに基づいてワークアイテムをパーティション化(例えば、同じフレームで動作させたワークアイテムすべてをグループ化)したり、他にもカスタム関数を使ってパーティション化したり、空間的にパーティション化することもできます。地形上に樹木を配置する場合、地形を格子状に分割し、その特定のタイル内でジオメトリを生成するワークアイテムすべてをグループ化することができます。パーティション化しただけでは、そのパーティション内のワークアイテムは何のワークも実行しません。これはただ単にグループ化したワークアイテムから結合した情報が保持されているだけです。それ以降のワークアイテムは、その結合した情報に対して動作することができます。マッパーマッパーは、グラフ内の関連性のないワークアイテム間で依存関係を構築します。普段の使用では、あまり必要になることはありません。異なる2本のノードチェーン内でワークを生成する場合に、システム側に片方のノードチェーンのワークが実際にはもう片方のノードチェーンの何かが完了するのに依存していることを伝えたい時に必要になります。スケジューラスケジューラノードは、実際にはワークアイテム内の実行ファイルを走らせます。スケジューラのタイプが異なれば、実行ファイルを走らせる方法も異なります。SchedulerはHQueueレンダーファーム上に実行ファイルを配置します。TOPネットワーク内に複数のスケジューラノードを配置することができるので、環境に応じた異なる方法でクックされるネットワークをセットアップすることができます(例えば、ローカルでクックすると同時に変更テストを試験段階のプロセスの一部としてファーム上でのみクックさせたい場合です)。パラメータは、そのTOPネットワークのクックに使用するスケジューラを制御します。右側の単純化した図は、異なる品質レベルでアニメーションの5フレームをレンダリングし、異なる品質で同じフレームからモザイク(タイル画像)を作成する基本的なネットワークを表わしています。品質設定が最終画像にどのように影響を与えているのか理解できるかと思います。パラメータに異なる値を設定)を含んだ4個の"ダミー"のワークアイテムを生成します。Renderノードを追加して、フレーム範囲を1-5に設定します。これによって、"親"ワークアイテム毎に5個の新しいワークアイテムが生成されます。Wedgeさせたアトリビュートは、その新しいワークアイテムに継承されます。Frameノードは、同じフレーム番号のワークアイテムに対して、依存関係を持った新しい"パーティション"アイテムを生成します。これによって、同じフレームのバリエーションすべての処理が完了するまでパーティションが待機し、それが完了したら次の工程に進みます。ImageMagickノードは、各フレームのレンダリングバリエーションを受け取り、それらのフレームを一枚のモザイク(タイル画像)に結合する新しいワークアイテムを生成します。テキストを重ねて、どの設定がモザイク画像内のサブ画像に該当するのかを示すといった処理もできます。Allノードは、すべてのワークが完了するのを待機するパーティションアイテムを生成します。All"の後に追加することができます。All"の後には、例えば、Post-Renderスクリプトを実行するワークアイテム、または、ワークが完了したことをユーザに通知するワークアイテムを配置します。詳細は、使用頻度の高いTOPノードを参照してください。動的ワークアイテムStatic(静的)TOPネットワークの実行を開始する前でも、単にノードパラメータに基づいた一部のワークアイテムが必要になることはご理解できるかと思います。ワークアイテムと呼びます。TOPは、レンダリングするフレーム毎にワークアイテムを生成し、そのレンダリングするフレーム数はノードパラメータで設定するわけなので、そのワークアイテムの数は事前にわかります。次のノードが入力のワークアイテム毎に新しいワークアイテムを生成するだけなのであれば、それらのワークアイテムも"静的"だと言えます。映画のワークフローはフレームベースであることが多く、レンダリングするフレーム数が事前にわかっていることから、そのワークフロー自体が結果として静的ワークアイテムを生成することになります。Dynamic(動的)場合によっては、一度ワークが完了した後にワークアイテムを生成したいことがあります。ワークアイテムと呼びます。ゲームやエフェクトのワークフローは動的であることが多いです。群衆をエージェント数に基づいてタイル別に分けて、そのタイル毎に群衆エージェントのセカンダリシミュレーションを実行したいです。セカンダリシミュレーションを行なうことができます。ワークアイテムの数がわかっているので、どれだけのワークが処理されるのかが感覚的にわかり、Houdiniによる完了パーセンテージの評価の精度がもっと良くなります。ワークフローによっては、動的ワークアイテムは避けて通れません。ゲームのワークフローを例にすると、レイアウトカーブからレベルを生成する時、カーブと他のカーブが交差、カーブとタイルが交差、カーブと他の何かと交差するまでそのワークの量がわかりません。Houdiniがそのワークが静的なのかどうかを判断できなくて、ワークアイテムを静的または動的のどちらで生成するのか選択する場合があります。あれば、そのノードを静的とマークすることで、その静的ワークアイテムの恩恵を受けることができます。Allノードは、動的な数のワークアイテムを静的な数(1)に変換することができます。他のパーティションノードでも動的な数を静的な数に変換することができます。このような場合は、手動でノード設定を変更する必要がなくて、Automatic設定で制御することができます。Automaticを選択することができます(Automaticは"このノードが静的ワークアイテムを生成することができる、または、何も入力がない場合に静的ワークアイテムを生成する"ことを意味します)。動的にしか動作しない、または、静的にしか動作しないようなプロセッサには、このようなオプションはありません。パラメータがあります。パーティション化が動的に生成された情報に依存している場合には、これを有効にしてください。パーティション化が直近の上流の静的ワークアイテム内の"既知"の情報にのみ依存している場合には、これを無効にしてください。その場合、グループ化も静的に計算することができます(一部のパーティションノードには、そのノードが動的または静的なパーティション化のどちらで動作させるのかを指定するためのオプションが備わっていません)。選択することで、既知の静的なワークアイテムすべてを生成することができます。これは、そのネットワークで必要となるワークの量を把握するのに役立つことが多いです。TOPノードネットワークインターフェース詳細は、TOPネットワークユーザインターフェースを参照してください。基本TOPの紹介TOPネットワークの背後にある基本的な概念とTOPネットワークでできる事について説明しています。PDGノードネットワークインターフェースTOPネットワーク特有のネットワークエディタ機能の使い方。アトリビュートの使い方TOPアトリビュートはPointアトリビュートのようなもので、TOPアトリビュートを使用することで、ワークアイテムからコールされたHoudiniノードのパラメータを設定することができます。ファイルパスTOPネットワークの入力/出力ファイルパスの上手な扱い方。使用頻度の高いTOPノード使用頻度の高いTOPノードの簡単なガイド。他のジョブを開始させるためにどのジョブが完了していなければならないのかをネットワーク内で表現する必要性がよくあります。TOPネットワークをクックする方法TOPネットワークに実際にワークを処理させて、そのネットワークで指定されたとおりに結果を生成させる方法。外部コンフィグレーションとデータTOPsで外部コンフィグレーションとソースデータを読み込んで、それを使ってワークを駆動させる方法。アトリビュートのWedge化Wedgeノードは、指定した1つ以上のアトリビュートのバリエーション毎にワークアイテムを生成します。次のステップ外部のプログラムを実行する方法TOPノードで外部機能をラップする方法。ファイルタグワークアイテムは、そのワークによって生成された"結果"を追跡します。各結果には、そのタイプのタグが付きます。フィードバックループFor-Eachブロックを使用することで、ワークアイテムに対して一連のオペレーションをループで処理することができます。コマンドサーバーコマンドブロックは、リモートプロセス(例えば、HoudiniやMayaのインスタンス)を起動したり、サーバーコマンドを送信したり、サーバーをシャットダウンすることができます。Managerは、ワークアイテムのクック時間を短くするために使用される持続型Houdiniセッションのプールを管理します。異なるスケジューラを使って、ワークのスケジュールを組んで実行する方法。ワークアイテムのパフォーマンスの可視化ネットワーク内のワークアイテムの相対的なクック時間(またはファイル出力サイズ)を可視化する方法。HandlingPDGノードまたはグラフからイベントを制御するためのPython関数を登録することができます。TipsとテクニックTOPsを扱う上で役立つ一般情報と上手な使い方。リファレンスすべてのTOPsノードTOPノードは、データをネットワークに送り込んで"ワークアイテム"に変換し、色々なノードでそれを制御するワークフローを定義します。ノードは、ローカルマシンまたはサーバーファーム上で実行可能な外部プロセスを表現しています。CallbacksProcessor系ノードはスケジューラで実行可能なワークアイテムを生成します。CallbacksPartitioner系ノードは複数の上流ワークアイテムを単一パーティションにグループ化します。CallbacksScheduler系ノードはワークアイテムを実行します。PDGパッケージのクラスと。