9
1

More than 3 years have passed since last update.

たまにはWrangleやVOPのRun Overに感謝しても良いと思います!

Last updated at Posted at 2020-12-09

本日はHoudiniApperinticeAdventCalendar10日目ということで

たまにはWrangleやVOPのRunOverに感謝しても良いと思います!

と題して進めていきます。
一言で言うと WrangleやVOPのRun Overって何よ? という短いお話になります。

Wrangle で言うとこの赤枠のところ
image.png
VOP で言うとこの赤枠のところ
image.png
になります。

ここがPointならPointひとつひとつに対して処理をしますよ、という意味です。
RunOverの処理対象は全部で5つあって

  • Detail( Only Once )
  • Primitives
  • Points
  • Vertices
  • Numbers

となります。
それぞれ処理対象が違いましてクラスであったり数字で処理をループさせます。
SOPベースのForEachもありますがそっちはSOPを組み合わせたりする時に重宝します。

でRun Overなんですが

Wrangleの場合

まずWrangleでこんな風に1行書いてみます。
image.png

@Cd = relpointbbox(0,@P);

これはバウンディングボックスのどれくらいの位置に今処理してる点の座標が居るかをPointの色としなさいという意味です。
@P は現在処理している点の座標、@Cdは現在処理している点の色という意味になります。
Run OverがPointなので一意に@P@Cdがポイントのアトリビュートだと認識してもらえます。
1行で簡単に書けてこれだけの事が出来てしまいます。

ところがこのRun OverがDetailになると途端にめんどくさくなります。

int npt = npoints(0);
for(int i=0;i<npt;i++){
    vector pos = point(0,"P",i);
    setpointattrib(0,"Cd",i,relpointbbox( 0,pos ));
}

同じことをやるのに1行25文字で済んでいたところが一気に5行133文字に増えました。
5倍もタイプしないといけなくなる訳です。
Run OverがDetailの場合では処理するPoint数を調べてその数でForでループする必要があります。
@Pで済んでいたところが明示的にpoint(0,"P",i)と書いて情報を引き出さなくてはならなくなり
@Cd = で済んでいたところがsetpointattrib(0,"Cd",i,relpointbbox( 0,pos ));
書かなくてはなりません。
これは大変めんどくさいですね。

VOPの場合

ではこれがVOPの場合どうなるか見てみましょう。
同じことをAttributeVOPでやってみます。
image.png
Relative to Bounding Boxというノード一個で済みますね。
image.png
Tabメニューからrelと打つだけで候補が先頭に来ますのでRelative to Bounding Boxノードを
作って入力のP(座標)と出力のCd(色)につなげてあげるだけでOKです。
簡単でラクチンですね。

AttributeVOPのRun OverをDetailにしてみます。
image.png
同じ結果を得る為にはノードが5個必要で7回接続しないといけません。
全頂点をForで回してそれぞれの点に対してImport Point Attributeで座標を取得して
Relative to Bounding Boxノードでバウンディングボックスの相対位置を取得して
Set Attributeノードで色を設定するということをやる訳ですがDetailだとめんどくさいという事が分かります。
PointやPrimitiveなどのRunOverが用意してあるということは大変素晴らしいことなのです。
普段何気なく作っているWrangleやVOPが短く手軽になっているのはRunOverのおかげと言えるかもしれません。

9
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
1