Wrangleで他のインプットのデータの読み方


こんにちは、篠島です。この間のSideFXによるVEXのウェビナーで説明されていましたが、@opinput1_P の様に書いてWrangleノードの二つ目のインプットのPositionデータが読み込めます。

 

今回のサンプルファイルです。
Wrangle_opinput.zip

Wrangleノードの別のインプットからデータを読み込むのに point(@OpInput2, “P”, @ptnum) 等、 point() や prim() 関数を使ってアクセスできますが、@opinput1_P 等と簡潔に書くことができます。

この@opinputの文法は下のようになります。@opinputの後にインプットの番号を 0 から始まる番号で指定します。そして _ の後にアトリビュート名を繋げます。もし インプット2の色情報が欲しければ @opinput1_Cd となるわけです。

@opinput#_AttributeName

 

ここで気をつけたいのが、@opinput#_AttributeName を使うと、別インプットからアクセスされるデータはWrangleノードのRun Overに依存します。Run OverがPointsなら、ポイントデータ、Primitivesならプリミティブデータが読み込まれます。1

 

仮にポイントデータにアクセスしているとして、別インプットのどのポイントのデータが返されるのかというと、現在Wrangleノードが処理している頂点番号と同じ頂点のデータを読み込みます。なので、インプットの頂点数が異なると、存在する頂点の分のデータしか読み取れません。
例えば、GridにBoxの色を @Cd = @opinput1_Cd; で読み取るとき、Boxのポイントは8個だけなので、8個分のデータしか受け取れず、残りのデータは 0 になっています。なので、@opinput#_AttributeName を使うのは頂点数や、プリミティブの数が同じ時に重宝します。

2

 

頂点数やプリミティブの数が同じでない時は point() や prim() 関数を使ってアクセスします。point() のヘルプを見ると下のように書かれています。 二つ目のプロトタイプを使って先ほどの @opinput1_Cd を point() 関数で置き換えると point(0, “Cd”, @ptnum) となりますが、point(0, “Cd”, 0) と書く事で、全てのポイントがインプット2の頂点番号0のデータを参照するようになります。

3