title


genchansansanは今日も戦う。

2013/02/03

グループの中心点の2通りの求め方

ボロノイで分割した各破片の中心座標もとめて~~がよく使われるので、まとめ。



破片の回数だけ、繰り返しできる仕組み。


1)ForEach SOP
2)Cop SOP によるDelete Stamp(ってHoudini Cook Bookには確か記載されてました)




1)ForEach SOP

voronoiは分割と同時に各破片をGroupに分けてくれるので、
ForEach SOPでGroupで繰り返し処理させる。



voronoiで作ったのを利用するならGroup Maskに「piece*」。


ForEach SOPの中身をこんな感じ。


ForEachが一つずつグループを取り出してくれるので、センターにpointをadd。


プリミティブをdeleteして中心点だけに。


球を適当に割って中心点だけにするとこんな感じ。


こっからはbestかわからないけど、
voronoi node下の左側で破片を取り出し、右側が先ほどの中心点の集まり。





左側はcopyの反復処理にたいして、一つずつpieceを取り出すために、group指定。
今回は、
`arg(primgroupmask("../voronoifracture1","piece*"),stamp("../copy1","copynum",0))`



取り出した破片は、transformで真ん中に。


stampはcopy SOPの2nd inputに入れた点の数までカウントするように、$PT。
2nd inputが無ければ$CYでNumber of Copiesを参照。


transformノードを表示させて一つ取り出せていればこんな感じ。



copy SOPを表示させて、元通りになっていれば完了。
中心点に特定のアトリビュートを与えておけば、いろいろいじれる。
今回は、pscaleを作ってvopsopでnoiseを加えるとこんな感じになる。





2)Cop SOP によるDelete Stamp

copyで複製するとなんかバグっていくので、好かないんだけど、



copyで複製する数は、今回はnullから「piece」を含むgroupの配列作って、
argcで何個あるかカウントさせたもの。


$CYで上のNumber of Copiesまでカウントアップしていくstampを作っておく。



ここはforEachで使ったのと同じ、、というかここからパクリました。


これで中心点だけ取り出せる。後はforEachと同じように、またcopyを使いましょう。




破片の数を変えたりすると、ファイル開きなおさないと点と破片が一対一対応せず
ぐちゃぐちゃになるのよね。
とりあえず、ForEachのほうが、loop処理がまとめられて自分的には好き。
以上、メモ。