« C4D ThinkingParticles パーティクルの振る舞いを考えてからXPressoを組み立ててみる。 | トップページ | C4D ThinkingParticles パーティクルを粉砕して散らす…「PFragment」-02 »

C4D ThinkingParticles パーティクルを粉砕して散らす…「PFragment」

今までは、単純な放出の「PStorm」やポリゴンの表面からの放出の「PMatterWaves」をなんとなく使うだけでした。
はっきり言うと、自分は初心者と何も変わらないのだ…
「C4D ThinkingParticlesを適当に使っている」のだ…

所有しているけど、全く使っていないC4Dユーザもいると思いますが…
さぁ、御一緒に…

さて、本題に入ろう…

C4D ThinkingParticlesで、放出された後のパーティクルを粉砕して散らせる…
例えば、放出された物体が壁や床に当たって砕け散るようなイメージで…

Pfragment_02_2

こんな時は、TPジェネレータ「PFragment」を使います。

マニュアルやヘルプには、「花火の様に…」と書いてありますね。
ノードの連結の図も載っていますが…
「パーティクルがライトに照らされると散る。」と…

でも、ヘルプの様に繋いだだけでは、「PFragment」のプリセット状態では何も起こらないのだ…

Pfragment_01

Pfragment_05

Pfragment_03

これだと、「ヌルオブジェクトがライトに照らされたら、パーティクルが散る…」のような気がするが…
ヘルプには、この接続時の「PFragment」のパラメータ設定が載っていない…

そうそう、C4DR11Demoには、ThinkingParticlesのシーンファイルが付いているのだ…
これを見れば、たぶん理解ができるんだろうね…

「PFragment」を使っていると思われるシーンファイルを開いて…

Pfragment_04

Pfragment_06

オブジェクトの構成は、複雑ではないようで…

では、XPressoを…

「TP Particle Collision」:今回は、パーティクルが分割されたときに散らすために使われています。
Pfragment_08

「TP Planar Gravity」:単純に下への重力です。
Pfragment_07

「TP Group Change」:なんじゃぁ… こりゃ… グループの移動だけに、こんな複雑な…
Pfragment_09

「TP Ring Emitter」:一目では何を処理しているのか…わかりません。
Pfragment_11

「TP Fragmentation」:単純に「PFragment」ノードの入力とユーザデータと1対1に繋いであるような…
Pfragment_10

思った以上にXPressoを複雑に組んである…
どれが、どう働いているのかバラさないとわからないのだ…
更に、パラメータも理解しなければならない…

これでは、XPressoをある程度使えないと… 初心者ユーザには酷な状態だ。
もっと単純で、一目瞭然なチュートは無いのかね…

この様に、すぐに解らない状況になると…
「パーティクルと壁や床に衝突位置に新たなエミッタを配置して、ぶつかった瞬間に、それらしい残骸を放出させたほうが、簡単で速いな…」となる訳だ…
これならば、C4D標準パーティクルでも十分なのだ…
そうすると「PFragment」… ThinkingParticles自体も、何時までたっても使えないままになるのだ…

では、この複雑なシーンをバラして仕組みを把握するか…?
そもそも、リングエミッタが、なぜこんなに複雑なのだ…?

では、バラして把握するのは面倒なので、気合を入れて自分でXPressoを組んでみる事にしよう。

要するに…
エミッタから放出されるパーティクルに、オブジェクトを割り当てて任意のグループに所属させる。
そのグループに「PFragment」を連結し出力を違う任意のグループにする。

そうすると、パーティクルグループは2個。いつものように「A」「B」を使います。

Pfragment_12

このグループの色は、AdobeIllustratorのレーヤー色のように自動で付かないものかなぁ…

オブジェクトの構成は…

Pfragment_17

Pfragment_18

で、C4D ThinkingParticlesのノードは…

Pfragment_13

あんなに複雑で…
が、こんなにシンプルに…

組んだだけなので、すんなり動くとは限りませんよ…

簡単に説明すると…
上段「PStorm」絡みは、単純にヌルオブジェクト「XPresso」の位置にエミッタを配置し、放出したパーティクルに立方体を割り当て、グループを「A」に設定しました。

下段「PFragment」絡みは、グループ「A」のパーティクルを受け出力をグループ「B」へ付け替えです。
「PFragment」の発動は、パーティクルのライフタイムの任意の時間に「On」を発生させるために「PAge」を使いました。

では、「PStorm」の設定から…
放出量が多いとわかりづらくなるので、少なめに…90フレームで1個。

Pfragment_14
設定として見せるほどでは、無いですね…
「PStorm」絡みの他のノードは、説明しなくても問題ないですね。

では、「PFragment」絡みです。
まずは、「PAge」これは、このブログでは初だろうか…
各々パーティクルのライフタイム中に任意のタイミングで「On」を発生させます。

Pfragment_15

今回はパーティクルが放出されでから20F~30Fの間中「On」を出力します。
今回のような場合は、1Fだけで良いのですが…10F間にして見ました。意味はありません。

この「PAge」は他に、放出された直後のフレーム「生成」や消滅し消えたフレーム「消滅」に「On」を出力できます。

今回の目的は、放出後20Fでパーティクルが砕け散るようにします。

さて、「PFragment」の設定はまだ、プリセットの状態です。

Pfragment_16

この状態で、いくらアニメーションを再生してもパーティクルは砕けません…
やはり、パラーメータが何を意味しているのか解らないとダメなようです。
下半分は、なんとなく予想が付きますが…

では、「しきい値」を0へ変更しアニメーションを再生しましょう。
Pfragment_19

Pfragment_20

Pfragment_21

見事に砕けました。

この「しきい値」0.0は全てのパーティクルを粉砕します。
1.0になると、粉砕しません。

でもなぜ、「PFragment」の「しきい値」の初期値が1.0なんだろうか…
初めから効果のある0.0に設定されていれば、初心者は惑わされなくてすみますが…

「たった一つのパラメータの値が初心者を苦しめる。」典型的な例だろう…
「しきい値」の初期値は0.0にするべきだ。

これで「PFragment」が動作することが確認できました。

最初に上げた例でC4D ThinkingParticlesを組んで見ましょう。

Pfragment_22

パーティクルグループは、「A」「B」にします。

Pfragment_12

球体をシーンに追加し、「半径」50で、「タイプ」は20面体。

Pfragment_23

Pfragment_24

大きさは、いつでも調整できるので適当に…

床と壁のポリゴンオブジェクトを作ります。

Pfragment_25

Pfragment_26_2

エミッタ用ヌルオブジェクトにXPressoタグを取り付けます。

Pfragment_27

エミッタには、「PStorm」を使い放出するパーティクルをグループ「A」に所属させます。
位置や配置は、ヌルオブジェクトと同じにします。
パーティクルにオブジェクトも割り当てます。

Pfragment_28

「PStorm」のレートを変更しやすくするために、ユーザデータを使用しました。
「PStorm」のパーティクルの「大きさ」も必要だろうか?

Pfragment_31

忘れていましたが、「PShape」で指定した球体オブジェクトは、ポリゴン化してください。

次は、重力を付けましょう。
放出されたパーティクル「A」と粉砕された「B」は共に重力を受けるので、重力は「All」で処理します。

Pfragment_29

Pfragment_30

では、壁と床にパーティクルが衝突して、粉砕するXPressoを取り付けます。

Pfragment_32

Pfragment_33

粉砕した「B」も重力で下に向かうので壁と床に反射させます。

「PFragment」の設定は以下の通りです。

Pfragment_34

タイプは、「カウント」にし1個のパーティクルから5個へ粉砕します。
粉砕し増えたパーティクルは、殻のように壊れます。
「厚さ」は30%
「速さ」はパーティクル「A」と同じ100

「元のオブジェクトのタイプ」を「固形」にしました。
これで表現できるのは、グループ「B」が外側の殻で、粉砕された後に中から殻が外れた小さなオブジェクトが「固形」でグループ「A」です。
下のような粉砕になります。

Pfragment_35

このパーツは、マテリアルを適用できます。
テクスチャタグの選択範囲に大文字で入力します。
マテリアルは、パーティクルジオメトリに設定するのではなく、基のオブジェクトに指定します。

Pfragment_36

Pfragment_37

パーティクルが粉砕され、パーティクルが床に散らばっていきます。

そうすると、パーティクル同士がめり込んだりしますので、パーティクル同士で衝突し反射させます。

Pfragment_38

Pfragment_39

パーティクルの衝突は、グループ問わず全てのパーティクル同士で判定し処理するので「PPassAB」のAB共に「All」を指定します。

Pfragment_40

衝突なのでもちろん、距離のタイプは「内側」です。
これで、「PPassAB」からは、指定した距離未満のパーティクルがペアで2つの出力ポートから渡されます。
距離の指定は、ユーザデータを使いました。

「PRepulse&Bounce」は、実際に反射の処理をします。

Pfragment_41

反射なので「バウンス」の値を調整します。
100%反射にしました。

これで、大まかなC4D ThinkingParticlesのノードの設定はできたと思います。

ではパーティクルジオメトリを追加し、実体化してはいけないパーティクルは無いので、「All」を指定し「サブグループ」もOnにします。

Pfragment_42

これで、アニメーションを再生してみよう。

Pfragment_43

影が無いので変な感じ…
適当に照明してください。

さて、パーティクルが増えると床から落ちていくパーティクルが出てきます。
制限が無いので、アニメーションが終わるまで落ち続けます。

問題を起こすのか解りませんが、ある程度落下したら消滅させましょう。

「パーテクル限界深度」と名前を付けました。

Pfragment_44

Pfragment_45

全てのパーティクルの座標からY成分を取り出して、指定した深度より低ければ、「PDie」で消滅させます。
深度の指定は、ユーザデータを使いました。

これで、完成です。

Pfragment_46

グループ「A」のパーティクルが、粉砕され数が増えたパーティクル「B」の上に乗っている状態です。
グループ「A」は壁と床に触れなければ、粉砕されません。

「PFragment_02.ZIP」

説明が不足していますが、興味をもたれたC4D ThinkingParticles初心者ユーザはシーンファイルを見てください。
もちろんC4D ThinkingParticlesが搭載されていないと駄目ですけどね…
持っていない人は、MaxonからC4DDemo版をダウンロードしてください。

Maxon
http://www.maxon.net/ja/downloads.html

このDemo版は、webを介してアップデートされるようで…
Demo版なのに… すごいねMaxon…

|

« C4D ThinkingParticles パーティクルの振る舞いを考えてからXPressoを組み立ててみる。 | トップページ | C4D ThinkingParticles パーティクルを粉砕して散らす…「PFragment」-02 »