« C4D ThinkingParticles もう仕組みは理解できたでしょうか… | トップページ | C4D ThinkingParticles パーティクルを粉砕させる… PFragmentではなく…02 »

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

前回のアニメーションの記事の前に… ただし関連記事です。

TPパーティクルを粉砕する…
以前の記事で、「PFragment」ノードを使いましたが、今回はパーティクルの位置を読み取って、その位置から新たにパーティクルを数個を生成し散らします。

「PFragment」ノードを使った粉砕は、パーティクルにオブジェクトが割り当てられていなければ、「PFragment」ノードは作動しません。

純粋にパーティクルのみを粉砕させるには…

今回は、元となるパーティクルに、TPジェネレータ「PStorm」ノードを使います。
このノードから生成されたパーティクルの消滅のタイミングで、「PBorn」ノードを使い新たなパーティクルを消滅位置から放出させます。

Tpfragment_01

今回のパーティクルグループは「A」「B」です。

Tpfragment_02

では、いつもの様に「PStorm」ノードとヌルオブジェクトでエミッタを作り、パーティクルグループを「A」に設定します。

Tpfragment_03

では、パーティクルグループ「A」のパーティクルが消滅したのを受けて、パーティクルグループ「B」を放射状に散らします。

「PAge」ノードでパーティクルが消滅したのかを取得しTPジェネレータ「PBorn」に入力します。

Tpfragment_05

Tpfragment_04

「PBorn」ノードなので、初期値(位置、速度)を設定しなくてはいけません。「PSetData」ノードで設定します。

Tpfragment_06

「PBorn」ノードで生成したパーティクルの最初の位置を取得するには、「PPass」から出力されたパーティクルから「PGetData」で取得し「PSetData」に入力します。

Tpfragment_07

取得した位置からランダムで放射状にパーティクルを散らすので、「ランダム」ノードで正規ベクトルを取得します。
取得した、ランダム正規ベクトルを必要な長さに調節し「PSetData」の速度に入力します。
「ランダム」ノードを使用しますので、ランダムシードを「PBorn」ノードで生成したパーティクルから「PGetData」で取得します。

Tpfragment_08
この様な「ランダム」ノードの組み合わせでは、R11.0以前は正確に動作しないかもしれません… R11.5Demoで動作します。

ランダム放射ベクトルの長さは、50.0に設定しました。

最後に、パーティクルグループ「B」を「PSetData」に入力します。

Tpfragment_09

さて、これで再生しますと…

Tpfragment_10

「TPFragment_01.ZIP」

では、パーティクルグループ「A」を垂直に放射して打ち上げ花火のようにして見ます。

シーン構成です。

Tpfragment_11

レンズ効果ノグローを設定したライトオブジェクトを適用します。

Tpfragment_12

Tpfragment_13

重力を設定します。

Tpfragment_14

レンダリングすると…

「TPFragment_02.ZIP」

このパーティクルの粉砕は、パーティクルグループ「A」の消滅に限った事ではありません。
例えば、パーティクルグループ「A」の生成から消滅まで「On」を出力し「PBorn」に入力すると…

Tpfragment_15

Tpfragment_16

この状態で、レンダリングすると…

「TPFragment_03.ZIP」

思ったより簡単な構造でした。
グループ「B」の「PBorn」にさえ「On」を送れば、好きなタイミングでパーティクルを生成します。
例えば、「PDeflector」でポリゴンの衝突判定を使えば、ポリゴンに衝突したタイミングでパーティクルを粉砕できます。

注)今回は、R11.5Demoでの動作は確実です。

|

« C4D ThinkingParticles もう仕組みは理解できたでしょうか… | トップページ | C4D ThinkingParticles パーティクルを粉砕させる… PFragmentではなく…02 »