こんにちは。今回はPOPのコリジョンについて説明しようと思います。コリジョンに関係あるノードはPOP Solver、POP Collision Detect、POP Collision Behavior があり、これらの違いを見ていこうと思います。
今回のサンプルファイルです。
collision.zip
まずはDOP内のオブジェクトとパーティクルを衝突させる場合は特に何もする必要はなく、RBDオブジェクトなどをMergeノードで繋げるだけです。Merge DOPにはAffector Relationshipというのがあり、デフォルトで左側のインプットが右側のインプットに影響を与えます。今回の例だとティーポットがパーティクルに影響を与えるので、パーティクルがティーポットに衝突してバウンスするわけです。仮にインプットを入れ替えるとパーティクルがティーポットに影響を与えるようになります。
POP Solver
もしパーティクルが衝突した時に反発以外の処理をしたい場合はPOP SolverのCollision BehaviorでAdd Hit AttributesをONにします。すると、衝突したパーティクルの色を変更したり、パーティクルを消したり、オブジェクトにくっつけたりできます。そしてデフォルトで衝突に関するアトリビュートをいろいろと付けてくれます。
POP Collision Behavior
次にPOP Collision Behaviorについて見てみます。このノードは単体では無意味で、POP SolverのCollision Behaviorと一緒に使います。といっても機能はPOP Solverの衝突処理と同じで、はっきり言ってこのノードの存在価値が分かりません。
POP Collision Detect
次にPOP Collision Detectを見てみます。このノードはパーティクルがオブジェクトと衝突したかを検出し、衝突したパーティクルの動作を決めます。ここで注意したいのが、衝突を検出するだけであり、パーティクルはバウンスしません。パーティクルをバウンスさせたければ、RBD ObjectやStatic ObjectなどをMergeノードによって繋げてバウンスさせる必要があります。ResponseをStopなどに変えない限り、衝突を検出しただけでパーティクルはオブジェクトをすり抜けます。
あと、このノードはDOPオブジェクトとの衝突はもちろん、SOPレベルのオブジェクトを使って衝突検出をすることも可能です。
まとめると、パーティクルをバウンスさせたいならMergeで繋げるだけ。衝突したパーティクルに対して別の処理をさせたいならPOP Collision Detectを使いましょう。