houdini勉強第1回は海外の方が作ったこのforeachとcookieを使ったアウトライン検出の
流れを追っていきたいと思います。

オリジナルは
http://www.sidefx.com/index.php?option=com_forum&Itemid=172&page=viewtopic&p=99530&sid=7eae861d23b7fbec3bd72f7e5923f451
です。

foreach便利ですけど、feedback的な処理を行う場合はちょっと
頭をひねる必要がありますね。

まずはblastで最初の要素を抜き出しますgroup==0でDelete Non Selected。
それからforeachのinput1に突っ込みます。
で、input2には生のデータをそのまま入れます。

このforeachで重要なのはMergeRsultsにチェックを入れないこと!
でないとforeachで回ったすべてのresultsが最後に結合されてしまします。

sampleではeachNumberで7回ループしてます。(connectivityでclassつないでeachAttribute
のほうが汎用性は高いかもしれません。)

foreachの中に入り、input1にはeach、input2にはblastをかけてます。
このeach、MergeRsultsのチェックをはずしたことでfeedbackのチェックが
入ってます。つまり一回目の結果が2回目でも利用できるようになっています。
そしてblastでは`stamp(“..”, “FORVALUE”, 1)`でインクリメントされた値が
どんどん入ってすべての要素を抽出してくれます。
注意(“)を入れないとStringにならないのでグループに認識されません

そこで、この2つの要素をcookieでUnionしてやります。え?なんで?あ、そうか、
inputにくる断片的なピースは、独立した要素なので重なりが発生してしまうからか。
それからCheck for Full Enclosureにチェックが入っていると
囲い込みに失敗した要素が消えてしまうからチェックをはずし、DoJitterで整えます。
うまくいかないときはJitterをいじったりsortSOPで並び替えをするのだろうたぶん。

そしてdivideでedgeを消して
加えてvopsop_group_onEdgeで隣り合う頂点で内積見て無駄な頂点をonEdgeに集めてblastで削除

これでアウトラインを取得できます

頭いい!

>>一覧にもどる