POPの基礎6 パーティクルのスプリット


前回はコリジョンの説明をしたので、今回はコリジョンが起きた時にパーティクルをスプリットさせてみます。パーティクルをスプリットするときにはPOP Replicateノードを使うのですが、ちょっと分かりにくいので詳しく説明してみたいと思います。

今回のサンプルファイルです。
split.zip

結論から言うとネットワークは下のように組みます。POP Solver内でコリジョンを有効にし、Collide Groupで衝突したパーティクルのグループを作ります。

Selection_422

 

そしてPOP Replicateノードのインプット2にPOP Locationの出力を繋ぎます。POP ReplicateのGroupでPOP Solverで作ったグループを指定してやります。すると、衝突したパーティクルのみがPOP Replicateによってパーティクルが複製されます。

Birthタブでどのくらいパーティクルを発生させるのかを指定します。これはソースパーティクル1つに対しての設定です。なので、Inpulse Countを1(毎フレームにパーティクル1つだけ発生) に設定しても、ソースパーティクルが2つあれば、合計で2つのパーティクルが発生します。
Shapeタブのところでソースパーティクルに対してどの位置にパーティクルを作るかを設定できるので、ここではPointを指定します。Pointにすると複製されたパーティクルはソースパーティクルと同じ位置に作られます。そしてAttributesタブの中でAdd to inherited velocityにして速度をランダムに追加しています。

 

Selection_423

Selection_427

split_1

すると、パーティクルがスプリットされているのが分かりますが、衝突するたびにスプリットしてしまうのであまり良くありません。

そこでPOP Groupによって最初に衝突したパーティクルだけをグループ化し、それに対してPOP Replicateを使うことで、何回もスプリットされるのを防ぎます。

Geometry Spreadsheetを見ると、衝突した時はhitnumが1になるのが分かります。そして衝突するたびにhittotalが増加していきます。要はhittotalが1になった時だけにパーティクルをスプリットさせるのです。

Selection_431
POP Groupでは下のようなコードを書きます。これが意味するところはhittotalアトリビュートとhitnumアトリビュートが1の場合にのみにパーティクルをグループに追加するという事です。
ここではhogeグループを作っています。POP ReplicateでGroupのところで新しく作ったhogeグループを指定するのを忘れないように。

if(@hittotal == 1 && @hitnum == 1)
ingroup = 1;

Selection_430

 

これで最初の衝突の時だけスプリットされるようになりました。

split_2