2010年5月26日水曜日

コリジョンしたパーティクルを分裂させる(コリジョン・イベント) その1

1)先ほどのシーンファイル(パーティクルのコリジョン)を開く。


2)「Collison1」のパラメータ・エディタ「Behavior」タブで、以下のように入力。

Collision Event: Collision1
Collision Group: SplitGroup1


Collision Event: 各パーティクルが対象ジオメトリと衝突した時このイベントを発生させる。
Collision Group: 衝突したパーティクルを入れるグループの名称。
今まさに衝突したパーティクルをソース・パーティクルから分離して、識別するために使用するグループ。
一連のオペレーター(例えば「Split」POP)は、トリガーとなるパーティクルを選択するために、このグループを使うことができる。
Preserve Group: Collision Groupのパラメータに登録されたグループがあれば、コリジョンで発生するパーティクルをそのグループと入れ替えないで、追加する。 


3)「Split」パーティクルノードをパーティクルネットワーク(Popnet1の下層)の一番最後(Collisionもしくは、Gravity(Force)Popになっている)に追加。

問題: 現時点では、すべてのパーティクルが分裂し、コリジョンイベントが成立していない。
これは「split」のActivationが1で、CollisionEventと関係なくSplitするからである。
注意: 「Split」は新しいパーティクルのソース(エミッター)であり、新しいパーティクルのネットワークとなる。


4)「Split」POPのパラメータ・エディタ 「Activation」に以下のエクスプレッションを追加。
popevent("collision1")

「popevent」関数は、名称付きのイベントを検知するために使われる。
http://www.sidefx.com/docs/houdini9.5/expressions/popevent
http://www.sidefx.com/docs/houdini9.5/particles/events
あるパーティクル・イベントが発生していれば1を返す。

popevent(event_name)
(event_nameは、文字列なのでエクスプレッション内では””で囲む必要がある)
この関数は、パーティクルノード内でのみ利用可能。
これはPOPノードのActivationパラメータに対して使うとイベントが発生したときのみそのノードが実行されるようにできるのでとても便利である。
イベントは名前の文字列によって区別される。
(文字列なのでエクスプレッション内では””で囲む必要がある)
問題: コリジョン(Collision1)の発生時にパーティクルの分裂が始まるようになったが、衝突してないパーティクルも含めて一度に分裂し始める。
これは、Collison Groupが指定されていないからである。


5)「Split」POPのパラメータ・エディタで、「Source Group」に「SplitGroup1」を選択、もしくは入力する。

結果: 衝突したパーティクルのみが分裂するようになる。
問題: 新たに発生したパーティクルは「Gravity」POPの影響を受けない。また分裂前のパーティクルがそのまま存在している。

6)「Split」POPのパラメータ・エディタで、「Kill original particle」をオンにする。

結果: 衝突前のパーティクルは分裂後に消える。
問題: 分裂後のパーティクルは「Gravity」POPの影響を受けていない。(これは次回)

0 件のコメント:

コメントを投稿