title


genchansansanは今日も戦う。

2013/05/28

くらえ! Pyro Cluster!!


Pyro Cluster from Naoki Kato on Vimeo.



隕石を降らせたいと思っていたが、知識が足りないため、巨大なPyroコンテナ作り、激重...となやんでいたところ、CGWORLD様が乗っけているじゃありませんか、「Pyro Cluster」の記事。




感謝。

でも初心者にはなかなかあの本だけじゃセットアップするの大変なのよね。
紙媒体だと、最終的な動きがどうなるかもよくわからないし。
記事書いてる方のブログにも最近解説のっけていらっしゃらないし、個々のノードの詳しい中身がよくわかりません。



でも使えるようになりたいってことで、頑張って作ってみました。
「Pyro FX」タブにある「Pyro Cluster」をとりあえずポチって、眺めること1日。
それを基に、smoke source換えて、Resize Containerと格闘すること半日。
できましたー
結果、、CGWORLDとほぼ同じノード構造にもなりました!

こんな動きでいいんですよね?ってか、自分が欲しかった動きしてくれてるのでこれでいいことにします。

「初心者がCGWORLD見ながらやってみた」ブログになりそう。



1.カーブ作って、「Pyro Cluster」!

一からなんて作れません。作れるようにしないといけないけど。
とりあえず今は、適当にNURBSのカーブ描いて、「Pyro Cluster」をポチっ。
これで、ベース完了。


ちなみに、今回の動画は、最終的にこんなノードたち。


水色で囲ったところが、「Pyro Cluster」で自動で作ってもらえるところ。
ノードはほぼCGWORLDと同じですよね、、、勝手に解説してよろしいのか、、私が?


2.ノード構成

動くオブジェクトが、今どのコンテナにいるのか、、というより、ここで求めたいのは、オブジェクトが動き、隣のコンテナに入る瞬間を取得している。

なので、動くオブジェクトの中心点が、どのコンテナ(=cluster attributeの値、、、多分)にいるか、「attribute transfer」で調べ、「time shift」で一フレ前と比較。
同じなら、全部の点を消す。違ったら、「cluster_points」でできた「average_points」のうち、cluster attributeが中心点と同じものだけ残す。




「object_merge2」・・・パスに沿って動くオブジェクト。
「resmaple1」と「scatter1」・・・カーブのポイント間に点をいっぱい作る。clusterするにはこれしないといけないみたい。
「cluster_points」・・・「cluster」、「scale」ってattribute作ってくれて、点の色を変えてくれてる。ここで、作られる二つのattributeが、それぞれのコンテナの識別、コンテナのサイズを決めてる。


「volume1」・・・中心点を作るためだけっぽい。これ、便利そう。
(group作って「add」で中心点作って、groupをdelでも同じことできる。)
「group1」・・・上の中心点だけ格納したグループ。
「delete2」・・・上の中心点を消す。



「delete3」・・・mergeにより、中心点が0番目のpointになるので、こいつと同じcluster番号のaverage_point以外消す。



ここまでで、動くオブジェクトの最寄のaverage_points一点だけが表示されるようになるはず。

timeshiftは1フレ前見るようにして、vopsopで


clusterを「import attribute」二つでinput indexを0と1でそれぞれ読み込む。
比較した結果を適当に「add attribute」で適当なattributeを作成。


「delete4」・・・1フレ目は消さないようにして、あとはvopsopで作ったattributeが0の時、
即ちcluster番号が替わり、最寄のaverage_pointsが替わった時だけ消えないようにする。



3.sim前に

source自体を分割する必要はないので、
勝手に作ってくれる「create_density_volume」の「Partitioning」は切っておく。

DopNetwokは、

で、
「pyro」の「Continuous」はon。
これは毎フレInstance Pointsを見て、点を元にコンテナ作成。



「source_density_from_curve_object1_sourcepts」の「Instancing」をoff。
これなに?helpも「???」


「resize_container」の「Max Bounds」はInitialization Staticに。
他のだと上手くできない。




以上。






重いのを如何に速く、が書かれているポイントだということで、

・Pyro Clusterは、自動で作ってくれるのは、simの開始フレで一気にコンテナができるが、
動きによっては、コンテナ一気に全部まだいらね~となるので、不要なコンテナを作らない。
・コンテナできたときにsourceがコンテナ内にないと、コンテナサイズちっちゃくしちゃって、その後のsimが上手く動かないので、これ回避するにはresizeしない(resizeのタイミング自由に換えられるのかしら?)。

ここらへんを一気に解決してくれる凄い便利なものでした。
こんなん考えつかんわ~すごいわ~。