« C4D ThinkingParticles パーティクルを粉砕させる… PFragmentではなく…02 | トップページ | C4D ThinkingParticles パーティクルの速度ベクトル… »

C4D ThinkingParticles パーティクルをポリゴンに衝突させて、ポリゴンを簡易的に凹ませる…

パーティクルがポリゴンと衝突して、ポリゴン表面を凹ませる…
そんなアニメーションを作るとなると、方法はいくつかあると思います。

「当たり判定をして、ポリゴンを法線方向の逆に移動させる」

この様な処理ならXPressoを駆使すると可能でしょうが…
面倒です。

もっと簡単で、技術を必要としない方法が望ましい事でしょう。

その1つが、「パーティクル」と「変位マップ」、チャンネルシェーダ「プロクシマル」の組み合わせで簡単にポリゴンに凹みを付ける事ができます。

「プロクシマル」は、ご存知ですよね…
ポリゴンと比較するポイントやエッジ、パーティクルの距離でサーフェスに濃淡を付けるチャンネルシェーダです。

下の図は「プロクシマル」を発光チャンネルに設定しました。

「TPFragWall_01.ZIP」

Tpfragwall_01

この「プロクシマル」とC4D ThinkingParticlesの組み合わせには注意が必要です。
「プロクシマル」に設定するオブジェクトは、ThinkingParticlesの場合には「パーティクルジオメトリ」です。

Tpfragwall_02

この設定したパーティクルジオメトリ。指定するグループが「All」の場合、何も設定しなければ「All」が割り当てられるのは知っていると思います。

Tpfragwall_03

このグループ設定されていない状態のパーティクルジオメトリを「プロクシマル」に設定しても、作動しません。

「TPFragWall_01_02.ZIP」

Tpfragwall_04

「プロクシマル」とThinkingParticlesの組み合わせを頻繁に使用しているユーザなら知っているかもしれませんが、頻度が少なかったり、初めて使うユーザは知らない人が多いと思います。
知らない状態で、この様な状態に陥ると「C4Dが壊れたのでは…?」と、余計なところで頭を悩ませることになります。気が付かないで諦めてしまう事となるかもしれません。

パーティクルジオメトリのグループが未設定の場合、グループ「All」が適用されるなら、「プロクシマル」にグループ未設定のパーティクルジオメトリを設定したとき、自動的に「All」で適用すべきですね、「プロクシマル」も…

ま、パーティクルジオメトリのグループが「All」であっても、必ずグループ設定を行う習慣を付けておけば、問題ではないでしょうね…

さて、本題に戻ります。
この「プロクシマル」を、変位マップに適用すると、ポリゴンが凹むわけですが…

「TPFragWall_01_03.ZIP」

Tpfragwall_05

変位マップは、面に対して両方向に対して変化させるので、基の形状と変わってしまいます。
変位マップの「形を丸める」を使うとHyperNURBSを適用した状態になるので、基の形状を維持した状態で面を凹ませるにはそれなりに考慮が必要です。

平らな面なら、あまり問題にはなりません。

上の図はたる型に変形してしまいました。

変位マップで凹みだけ付けるのであれば、グラデーションを50%のグレーから0%の黒の範囲を使うと、面が盛り上がりません。

Tpfragwall_13_2

「TPFragWall_01_04.ZIP」

Tpfragwall_06

「カラー変換」等でグラデーションを操作すると、元の形状に近付きますが、ポリゴンがくっきり表れてしまいます。

形状を考慮し、変位マップの「形状を丸める」等で対応すると下のようになります。

「TPFragWall_01_05.ZIP」

Tpfragwall_07 Tpfragwall_04

比較したフレームが少しずれていますが、基の形状と大差なく見えます。
対処の仕方はモデルによって違ってくると思います。
臨機応変に対応してください。

さて、放出されたパーティクルは動いています。
このままでは、凹んだ面もパーティクルが通り過ぎたり消滅したりすると、凹みが消えてしまいます。

凹ました状態を維持するのであれば、パーティクルをポリゴンに衝突した位置から動かさないようにします。
もう簡単ですね。

「PDeflector」ノードで、ポリゴンに衝突したときに速度を0.0に「PSetData」ノードで設定します。

まずは、今回のパーティクルグループです。

Tpfragwall_08

シーンの構成です。

Tpfragwall_09

エミッタ部です。

Tpfragwall_10

ポリゴンに衝突して停止する部分です。

Tpfragwall_11

レンダリングすると…

Tpfragwall_12

「TPFragWall_02.ZIP」

衝突したところで停止し、ポリゴンは凹んでいます。

「C4D ThinkingParticles パーティクルを粉砕させる… PFragmentではなく…01/02」
「C4D ThinkingParticles パーティクルをポリゴンに衝突させて、ポリゴンを簡易的に凹ませる…」
この2つが理解できれば、このアニメーションがどのような仕組みかが、想像できる思います。

|

« C4D ThinkingParticles パーティクルを粉砕させる… PFragmentではなく…02 | トップページ | C4D ThinkingParticles パーティクルの速度ベクトル… »