No More Retake

3DCG屋さん向けTips&Referenceサイト

メニュー

Houdiniノード:For Loop(VOP)

Houdiniノード勉強回。

今回はVOPのfor Loop系。

ForLoopVop_v01

vopでのfor loop処理がHoudini15から新しくなって、分からなくて困ったのです。
「なんじゃこりゃ」、「どうやって使うんじゃ」と思って調べたやつ。
・・・・・・前回同様、VimeoのMaster Class見ながら勉強したんですけどねw

 

VOP内でLoop処理は、Block Begin系ノードとBlock End系ノードをペアで使用することで実現するようです。
Loopの種類に応じて、使用するノードや組み合わせが微妙に違います。
VOP Network内でtabメニューからloopで検索すると、用途に応じてそれらをの組み合わせをプリセット化したものが出てきます。

ForLoopVop_v02

これらから適当に選んで作ると、オレンジの領域で囲われたBlock Begin/Endのペアが作成されます。

ForLoopVop_v03

このBlock Begin/Endの間にノードを入れていくと、それがLoop処理されます。

VOPのLoop、大きく分けて蓄積型とバラバラ型の2種類。

forloop_v04

ひとつのデータに対して特定の処理を繰り返し実行し結果を蓄積してゆく蓄積型と、
複数のデータ(配列)それぞれに対して特定の処理を実行するバラバラ型。

シンプル蓄積型のFor Loopから使い方を見てきます。
標準的なLoopで、 指定回数分Loopを繰り返します。
tabメニューから”For Loop”で作成します。

for_vex_v01

ためしにノイズを10回かけてみた。ネットワークはこう。

for_vex_v02

Block Beginノードへの入力でLoopの設定をいくつか制御できます。
lenght inputへのコネクトでLoop回数を指定できます。
index inputへのコネクトでLoopを任意の回数の状態からスタートできます。(通常Loopのスタートは0回目から)
lenghtやindexの値はloop内でも参照可能。必要に応じてこれらの値を使うことができます。
Block Begin/Endの”Output Name”を同名で指定すると、そこでデータがループします。
複数の異なるデータをループ処理する場合は、Output Nameを付けると分かりやすいっぽい。
何も指定しないと、上から順番に対応しています。
一見、Block Begin/End間は繋がってないように見えるけど、ちゃんと繋がっています。

VimeoのMasterClassのヤツはこれでColorのSmoothやってましたね。

for_vex_v05


次、バラバラ型のFor-Each Loop。
VOP Network内でTabメニューから”For-Each Loop”を選択して作ります。

for_vex_v03

このループにはarray(配列)を使います。
配列の中身を順番にLoop処理してくれるようです。
VimeoのMasterClassではNeighbours(VEX)というノード使って隣接するポイントの配列を用意してました。
これ、便利ですね。これもHoudini15からのノードかな?

for_vex_v04

ネットワークの組み方は基本、For Loopと同じ。
先述のFor-LoopのでのColorのSmoothを、For-Each Loopで作るとこう。

for_vex_v06

For Loopの時の”lenght”が、”array”と”element”に置き換わった感じ。
arrayが配列でelementが配列の要素。
VOPのFor-Eachは、「配列のLoop処理」と覚えておけば間違いなしかな。


この[For Loop]、[For-Each Loop]を基本の型として、他に亜種がいくつもあります。

まず「For Loop Until」と「For-Each Loop Until」

for_vex_v07

それぞれ、「For Loop」「For-Each Loop」の機能拡張版。
Block EndノードがBlock End Break-ifノードに変わり、Conditionの入力が増えてます。
このConditionがFalse(0)の時、Loopが止まります。

つぎに「Do While Loop」。これもFor Loopの亜種です。

for_vex_v08

プログラムのDo While文と同様の機能です。
初めに一度Loop内の処理が実行されて、以降は条件がTrueである限りLoopを続けます。
Block EndにConditionの入力があります。このConditionがFalse(0)になるまでLoop処理が続きます。

つぎに「While Loop」

for_vex_v09

これはBlock BeginとBlock Endの両方にConditionの入力があります。
Beginの方のConditionはLoop処理前のチェックとして機能します。
このConditionがtrue(0意外)の場合のみLoop処理が始まり、EndのConditionがFalseになるとLoopから抜けます。

そんな感じです。

間違い不足等ありましたらご指摘を!

関連記事

  1. 2016.02.08

    Houdini:SubFrame

コメントをお待ちしております

このサイトについて

3DCG Tipsサイト。Houdiniの記事が多めです。

RSS

follow us in feedly

アンケート

記事の難易度についてどう思いますか?

View Results

Loading ... Loading ...

言語切り替え

  • English (United States)
  • 日本語

Archives

  • 2017 (10)
  • 2016 (36)
  • 2015 (64)
  • 2014 (54)
  • 2013 (60)
  • 2012 (54)

スポンサードリンク