[houdini] 特定のパーティクルの削除(2)

前回の続きです。
マスターが教えてくれた方法は基本的には前回紹介したものと変わりません。
リストの取得の方法をpythonではなくvopsopを用いています。
違いはそれだけですが圧倒的にpythonより速いです。
pythonはパーティクルでのこういった処理には不向きだとか。
マスターが言うにはもっと速くて良いやり方もあるかもしれないとのことでしたが、僕はとりあえずこれで十分でした。

簡単に説明し記録したいと思います。

今回はFLIP Solverを使用したシーンを用意しました。

delete_particles_based_on_ID_2

まずattributeにはidを追加しておきます。
ここで一回パーティクルのキャッシュを取っておきます。毎回計算させると重いですし。。。

delete_particles_based_on_ID_3

先ほども言いましたが前回紹介したものと手順はほぼ同じです。
timeshifノードで任意のフレームを指定し、消したいポイントを選択、blastノードに格納。
ここからが違います、vopsopにそれぞれをコネクションします。

delete_particles_based_on_ID_4

parameterノードを作り今回は仮にCountという名前にしました。typeはintです。
countのパラメータにはエクスプレッションで

npoints(opinputpath(".",1))

と記述しています。
これはなにかというとblastノードで格納したポイントの数をカウントしているということです。
それをfor loopのendにコネクションすることでcountの数だけfor loop内の処理をすることになります。
mayaのmelで例えれば

int $count = `size($select)`
for($i=0 ; $i < $count ; $i++)

みたいな感じでしょうか、おそらく。
またidとpoint numberを使うことになるのでこれもfor loopにコネクションします。

delete_particles_based_on_ID_5

次にfor loopの中で行っているのはinputの0と1のidを比較し同じであればif内の処理をするようになっています。
import attributeでidを指定、op input indexを1に設定します。
あとはcompareでequalを選択しidを比較、point numberを割り出します。

delete_particles_based_on_ID_6

そしてif内ではpoint numberをadd point to groupノードによりグループ化します。
最後にblastでグループを指定してやって終わりです。お疲れ様でした。

こうやって文章におこしてみると長く感じますがやってることはhoudiniに慣れいる人にとってはとても簡単なことなんだと思います。
vopを習得してこそのhoudiniだと思うので日々勉強するしかないですね。
vopは感覚的にはmayaのmelをノードベースで構築していくのと近い感じでしょうか。
そもそもmelもたいして勉強してないので簡単なことしかできないのですが。。。

僕みたいなさわりはじめたばかりの人はブログにメモしておくと復習にもなるのでいいですね、ちょっと疲れますが。
今回テストしたシーンも用意しましたので見たい方はどうぞ!
delete_particles_based_on_ID.hip

最後にマスター色々教えてくれてありがとう!

  1. コメントはまだありません。

  1. トラックバックはまだありません。