« C4D ThinkingParticles パーティクルを粉砕させる… PFragmentではなく… | トップページ | C4D ThinkingParticles パーティクルをポリゴンに衝突させて、ポリゴンを簡易的に凹ませる… »

C4D ThinkingParticles パーティクルを粉砕させる… PFragmentではなく…02

前回は、「PAge」ノードでパーティクルライフタイムでのイベントでパーティクルを粉砕しました。
では、ポリゴンとの衝突でパーティクルを粉砕するには…

前回の記事を理解できたユーザには、問題なくC4D ThinkingParticlesを組む事ができる事でしょう。

衝突用パーティクル:グループ「A」
粉砕用パーティクル:グループ「B」

Tpfragment_17

衝突用ポリゴンとC4D ThinkingParticles用XPresso付きヌルオブジェクトを用意します。

Tpfragment_18

最小限のエミッタをヌルオブジェクトと「PStorm」で作成します。

Tpfragment_19

このXPressoとは別に新規のXPressoにパーティクルの粉砕部を組みます。

パーティクルとポリゴンオブジェクトとの衝突判定に「PDeflector」ノードを使います。

Tpfragment_20

このノードの「イベント」を「PBorn」ノードに渡し衝突時にパーティクルを生成します。
生成位置は、「PDeflector」ノードの「イベント位置」から衝突した位置を取得し、新たなパーティクルに適用します。

Tpfragment_21

今回は、グループを「PGroup」ノードを使用しました。「PSetData」ノードででもかまいません。
この状態で再生すると、グループ「A」のパーティクルがポリゴンに衝突し、その位置にグループ「B」が張り付きます。
速度を設定されていないグループ「B」は、ポリゴン表面に留まり、グループ「A」は反射します。
今回は、グループ「A」のパーティクルは、ポリゴンに衝突すると消滅する事にします。
「PDeflector」のイベントを受けて「PDie」ノードで衝突したパーティクルを消滅させます。

Tpfragment_22

では、グループ「B」のパーティクルを放射状に散らします。
「PBorn」ノードで生成されたパーティクルから「PGetData」ノードで「ランダムシード」を取得します。
取得した「ランダムシード」を「ランダム」ノードに入力し「正規ベクトル」を取得します。
「計算:乗算」ノードを使って長さを調節し、「PSetData」ノードの「速度」に入力して終わりです。

「TPFragment_04.ZIP」

Tpfragment_23

基本構造は、前回の記事と同じです。パーティクルのライフタイム系のイベントなのか、空間系のイベントなのかの違いです。

ポリゴンに衝突粉砕というと、通常思い描くのが、反射方向や面の法線方向に飛び散るイメージになります。

では、グループ「B」に「PSetData」で適用する「速度」を放射状ベクトルではなく、方向性のあるランダムに飛散するベクトルに変えてみます。

今回は、複雑な計算はさせないで、簡易で求める方法を使います。
一般的なノードで完結します。

Tpfragment_24

方向ベクトルとランダム放射状ベクトルの長さを調整して広がりを操作できます。
法線等のベクトルと、「ランダム」ノード、「計算」ノードで済みます。
三角関数が苦手なユーザでも問題なしです。三角関数を使わないので角度指定はできませんが…

Tpfragment_25

こんな具合で大丈夫だろう…
必要であれば、出力されたベクトルの長さを調整してください。

では、これを組み込みます。

方向ベクトルは、「PDeflector」ノードの「反射イベント」を入力しました。

Tpfragment_26

「TPFragment_05.ZIP」

前回と同様、単純な回路なので難しくないと思います。
このブログで使用済みのノードです。前回と今回は応用編という位置づけでしょう。
ただし、これが「ポリゴンとの衝突でパーティクルの粉砕」のベストの方法と言う訳ではありません。

では、簡易でオブジェクトを割り当ててみます。
グループ「A」には円柱、グループ「B」には球体です。
「パーティクルジオメトリ」を追加し、グループ「All」を設定し、サブグループは「On」ですね。

Tpfragment_27

Tpfragment_28

パーティクル「B」には「大きさ」も設定します。

Tpfragment_29

この状態で再生すると…

Tpfragment_30

「TPFragment_06.ZIP」

グループ「A」のオブジェクトの向きが進行方向に向いていません。

この向きを合わせる為に「PRolling」ノードを使います。

Tpfragment_31

Tpfragment_33

移動の方向にZ軸を向けます。

Tpfragment_32

「TPFragment_06_02.ZIP」

これで、一通り設定しました。

|

« C4D ThinkingParticles パーティクルを粉砕させる… PFragmentではなく… | トップページ | C4D ThinkingParticles パーティクルをポリゴンに衝突させて、ポリゴンを簡易的に凹ませる… »