Skip to main content

0から始めるPDG

いつも SOLARIS で USD ばかり触っている私ですが、パイプライン屋らしく
PDG についても調べていきたいと思います。

PDG とは、「Procedural Dependency Graph」の略で、様々な処理をプロシージャルに構築し 自動化するためのツールセットです。 多くの 3DCG のワークフローでは、何かしらの処理が依存関係を持ちつつ大量に実行する必要がある
というシチュエーションが多くあります。
例えば、何かしらのシミュレーションを実行し、レンダリングをし、ムービーにする...など。

そういった処理が 1 度だけで終わればよいですが、多くの場合は何度も繰り返し実行します。
そういったときに PDG を使用してあらかじめやりたい処理を定義し、ジョブを実行できるようにすれば
複雑な処理でも毎度人間が頑張らなくても実行できるようになります。

実行する

まずは実行します。 TOPs (Task Operator)を開き、

TOP Network を開きます。

そして、Topnet に入り、処理を作っていきます。

Processor

PDG 上でタスクを実行する場合は、「WorkItem」と呼ばれる実行タスクを作成します。
この「WorkItem」を作るのが「Processor ノード」です。

PDG 内のノードは、WorkItem と呼ばれる実行タスクを作成します。
よく使用する「GenericGenerator」ノードを例に構造をみていきます。

このノードは、いわゆる実際に実行するジョブ(Batch ともいう)を作るためのテンプレート
のようになっています。

GenericGenerator は、ItemCount で指定した WorkItem を生成し、Command を実行します。

GenericGenerator は、指定の数分だけ実行しますが
同じ処理を実行するだけでは意味がありません
そうではなく、引数を変えて基本同じの処理を引数を変えてしたいはずです。
PDG では、この各処理ごとの引数を「アトリビュート」として扱い、その「アトリビュート」を利用して
コマンドや HDA などを実行するのが、基本的な構造になります。

サンプルの場合、 PDG の Index を表示します。

Processor によって生成された WorkItem は、WorkItem ごとに固有のアトリビュートを持ちます。
そのアトリビュートは、TaskGraphTable を見ると確認できます。

https://www.sidefx.com/ja/docs/houdini/tops/attributes.html

Index のようなビルトインのアトリビュートは、 @pdg_#### で使用できます。

試しに、この GenericGenerator を実行します。

実行すると、ノードに〇が作成されます。
これが WorkItem です。
ItemCount を「8」にしたので、WorkItem を生成して、Command を実行します。

WorkItem の「index アトリビュートをプリントする」コマンドを実行したので、
@pdg_index が展開されて Index is 3 が表示されています。

PDG の基本は、Processor で WorkItem を作り、Attribute を指定し、指定の処理を実行する というのがわかりました。

単体の処理を実行することはできましたが、
それだけではなく、複数の処理を組み合わせられるのが PDG の真骨頂です。

そのあたりはまた次回。