Houdiniバージョン19.5
PDGについての概要と、ROPに比べてどのような利点があるかを見ていきましょう。
PDGについての議論を始める前に、一歩引いて全体像を見てみたいと思います。Houdiniでは、OBJコンテキストやSOPコンテキストなど、さまざまなコンテキストがあります。
Houdini内では、シミュレーションやレンダリング、コンポジットなど、他のコンテキストもあります。これらは、Houdini内で行うタスクや作業です。そして、Houdiniの外では、ファイルのコピー・移動などのHoudiniに依存しないタスクもあります。画像の操作など、考えられるあらゆる作業が含まれます。
これらのタスクは、単に実行する必要のある一般的なタスクまたは一般的なジョブとして一般化することができます。これらのジョブの中には、先に前のジョブが実行される必要があるものもあります。また、いくつかのジョブは独立しているため、同時に実行することができます。では、これらのジョブが正しい順序で実行されるかどうかは、どのように決定すればよいのでしょうか?
ここでPDGが登場します。PDGとは、Procedural Dependency Graphの略です。これは、タスク間の依存関係を作成し、非常に効率的にこれらのタスクを実行するシステムです。
では、PDGを使用したいと考える例を見てみましょう。
従来のROPでは、通常、上の図のようにレンダリングとアニメーションのシーケンスを設定することがあります。まず、アニメーションを作成し、それからレンダリングします。そして、これらのすべての画像がレンダリングされたら、その画像からビデオを作成できます。ROPが行っているのは、私たちが作業を行う順序を定義しているだけです。
ROP内部で作業を行う場合、より複雑な作業を行おうとすると、制限がでてきます。例えば、すべてのアニメーションが終わらないとレンダリングできない、すべてのレンダリングが終わらないとビデオを作成できない等。
では、その代わりにPDGでどのように設定するかを見てみましょう。
アニメーションシーケンスには10フレームのアニメーションがあります。これらは10個の異なるタスクで表されます。つまり、アニメーションには10個の緑色の矩形があります。それぞれのフレームをレンダリングします。そのため、レンダリングセクションにも10個の矩形が表示されます。そして、ビデオを作成する段階では、1つのビデオのみが作成されるため、1つの矩形のみが表示されます。
PDGでは、これらのタスク間の依存関係を視覚化できます。この場合、各タスクが互いに依存していることがわかります。レンダリングタスクは、まずアニメーションフレームの生成を必要とします。1つのフレームが準備できたら、そのフレームをレンダリングすることができます。他のフレームが準備されるかどうかには依存しません。
グラフの一番下にたどり着いたとき、このビデオタスクが開始する前にすべてのレンダリングが完了している必要があります。PDGでは、これらの依存関係を設定して、作業を並列で実行するか、一部のタスクが終了するまで待つかを選択することができます。
これらのタスクを一般化して表示すると、全体がよりプロシージャルになることに注意してください。PDGのこの一つのコンテキストには、私たちが行うすべてのジョブがカプセル化されています。そのため、ビデオを別々にレンダリングするためにROPに入ったり出たりする必要はありません。画像がレンダリングされたら、すぐに次の作業に進むことができます。
PDGでの作業に関する一般的な誤解について説明したいと思います。PDGを使用するためにスクリプトの知識は必要ありません。また、このコースではスクリプトについては触れません。PDGを使用するためには専用のレンダーファームは必要ありません。ローカルのマシンだけで作業が可能です。複数のコアとスレッドを持つ単一のマシンで十分です。複数のコアを備えたローカルのマシンは、まるでローカルのレンダーファームを持っているようなものです。
また、Houdini環境内でのみ作業する必要はありません。そして、一般的なタスクも作業することができるので、Houdiniの範囲を超えたワークフローにもPDGを使用することができます。
パート2ではPDG用語について説明します。