この記事ではPDGで標準で利用できるアトリビュートについて紹介を行います。PDGのワークアイテムのアトリビュートはHoudiniのPointアトリビュートと同じような感覚で利用することが可能です。
ワークアイテムにはHoudiniジオメトリ上のPointアトリビュートと非常によく似た形でアトリビュートが設定されています。Houdiniでのアトリビュートと同様に、親となるワークアイテムから子のワークアイテムに対して、アトリビュートは引き継がれます。これを利用して上流のワークアイテムの処理の情報を子アイテムに流すようなネットワークを構築することができます。
Houdiniのように、カスタムコードを用いてアトリビュートを制御することもできますが、PDGにおけるアトリビュートの一般的な用途は、TOPノードやネットワーク、あるいはHoudiniのネットワーク上のパラメータの参照になります。
例えば、以下のような事例が考えられます。
- 複数なレンダリングにおけるサンプル数などを調整する場合を考えてみます。
まず、Wedgeノードを用いて@pixelsamplesアトリビュートを作成し、複数の異なる値を設定したワークアイテムを作成します。
次に、ROP Mantra Renderノードで@pixelsamplesをPixel samplesの値に指定します。
- HDA Processorノードをクックし、Houdiniのアセットを作成する場合を考えてみます。
TOPネットワークによって呼び出される外部アセット/ネットワークからワークアイテムアトリビュートを参照することも可能です。アセットのパラメータをアトリビュート参照を利用することでワークアイテムから値を取得することができます。
@attribute.componentを利用してベクトルの構成要素を参照することができます。
この構成要素とはHoudiniでは@P.xや@Cd.rのような0から始まる数字で参照できるものを指します。
PDGにおいては、@pos.xや@pdg_output.0などが該当します。
Expressionを用いてアトリビュートを利用する(プル)
HDAProssesorのクックやレンダリングノードなど、TOPネットワークのクックの際にノードが呼び出される場合、呼び出されたノードに対して、クックしているワークアイテムのアトリビュートを設定、参照できます。
ノードがクックを行い、シーンビュー上に結果が表示される際には、現在選択されているワークアイテムのアトリビュートが利用されます。 つまり、ワークアイテムをクリックして選択することで、ワークアイテムごとのリザルトをシーンビュー上で確認することができます。
このような参照方法を「プル参照」と呼びます。
逆にTOP固有のエクスプレッションをパラメータに記述したくない場合は、TOPネットワークの実行時にパラメータをワークアイテムのものに上書きすることもできます。
これを「プッシュメカニズム」と呼びます。
また、アトリビュート参照先があいまいな場合(たとえば、ジオメトリのポイントアトリビュートとTOPワークアイテムアトリビュートの名前が同じ場合)は、SOPアトリビュートがTOPワークアイテムアトリビュートよりも優先されます。
文字列パラメータを設定する
ch( ‘../ geo1 / tx’)* 2のように、アトリビュートの参照はHscriptにて行われます。
文字列パラメータでエクスプレッションを使用したい場合は、バッククォート( `:[Shift]+[@]キーで入力)で囲んでエスケープする必要があります。 たとえば、ワークアイテムの組み込み出力アトリビュートをファイルパスパラメータで参照するには、参照を以下のようにバッククォートで囲む必要があります。
`@ pdg_output` |
これを利用して、パラメータ内のテキスト内にエクスプレッションを組み込むことができます。 たとえば、ファイルパスにワークアイテムのフレーム番号を使用するには、次のようにします。
$HIP/output/$OS_`@pdg_frame`.exr |
実行時にパラメータの内容を置き換える(プッシュ)
SOPなどのノードにTOP固有のエクスプレッションを配置したくない場合(たとえば、レンダリングするROPが他のパイプラインと共有されている場合、または手動で使用されている場合)は、実行時にWedgeノードを用いることで、パラメータの値をWedgeアトリビュートに置き換えることができます。
ビルトイン アトリビュート
PDGのワークアイテムにデフォルトで実装されているビルドインアトリビュートには以下のようなものがあります。また、プロセッサノードが入力ワークアイテムから新しいワークアイテムを生成すると、「親」ワークアイテムの出力アトリビュートが「子」ワークアイテムの入力アトリビュートとして自動的に割り当てられます。
@pdg_index
ノード内のワークアイテムをソートするためのキーとして使用されます。
@pdg_name
ワークアイテムの名称です。インターフェース内の個々のワークアイテムを区別しやすくします。
@pdg_priority
ワークアイテムの優先度です。優先順位の高いワークアイテムは、優先順位の低いアイテムよりも先に実行されます。
@pdg_frame
このアイテムが作業しているフレーム番号になります。すべてのワークアイテムがフレームに関係する処理を行っているわけではありませんが、フレーム番号を格納する必要がある機会は多岐にわたることから、ビルドインとして用意されています。
@pdg_input
このワークの入力として使用されるファイル名のリストです。たとえば、ワークアイテムが「レンダリングされた画像の上にテキストを描画する」ものである場合、これはレンダリング画像へのパスになります。
@pdg_output
このワークの出力として作成されたファイル名のリストです。たとえば、ワークアイテムが「レンダリングされた画像の上にテキストを描画する」を表す場合、これはテキストが描画された出力画像のパスになります。