velocityのデータ型はベクトル<<
particleShape1.velocity = <<0,time,0>>;
このページに、sphrandを用いた例がある。
この例ではaccelerationに使われているが、このsphrandはベクトル値を返してくるので、
上記の<
particleShape1.acceleration = sphrand(2);
--------------------
このSphrandについてもう少しくわしく調べてみた。
sphrand:
このコマンドは、指定した半径の球体内に均一に分散されるランダムなベクトルを生成します。
記述形式は引数である半径を( )内に入れる。
引数を2とした場合の記述は以下の通り。
sphrand(2)
これによりランダムなベクトル値が得られる。
スクリプトエディターで繰り返し実行した場合の値を示す。
毎回異なるベクトルが与えられていることがわかる。
sphrand(2);
// Result: <<0.674383,>> //
sphrand(2);
// Result: <<-1.269656, 0.516169, 0.0812025>> //
sphrand(2);
// Result: <<-0.544219, 0.441139, 0.446326>> //
そして先ほどのランタイムエクスプレッションでは、
particleShape1.acceleration = sphrand(2);
sphrand(2)が、各パーティクルのアクセラレーションにそれぞれ異なるベクトルを渡す。
そして、それはフレーム毎に更新され新しい値を渡す。
ノート(ラインタイムエクスプレッションの特徴):
各パーティクルに実行される。
フレーム毎に実行される。
そのためこのシーンを再生すると
小刻みに震えつつランダムな方向へパーティクルが飛んでいく。
(見やすくするにはsprand(10)程度にするとよい)
小刻みに震えるのは、アクセラレーションがいろいろな方向へ毎フレーム変化しているからだが、一方向へ飛び続けるのはアクセラレーションが変わっても、初期の動きを保存しているためだ。
従ってパーティクルのConserveをゼロにすると、パーティクルはそこからほとんど移動せず、小刻みに震え続ける.
見ているとタービュランス・フィールドにくらべて均質にランダムな動きを生み出してくれる。
タービュランスは、Magnitudeをあげると、一部がより集まってしまうことがあり、あまりMagnitudeをあげられないことがある。
一概にすべてのケースで、この方法が良いとはいえないが、ランダムな動きが偏らないようにするには、もしかしたら使えるかもしれない。
動きを見た感じでは、何らかの物やキャラクターが粒状化し分散して消えていくようなショットに使えるような気がする。
--------------------
おもしろいのは、パーティクルのアクセラレーションを一定値にするには、creationではなくrantimeExpressioを使い、定数を代入するということ。
アクセラレーションは各フレームの開始前に<<0,0,0>>に初期化されるのがその理由で、ちなみにcreationExpressionにしてしまうと全く動かない。
ノート(クリエイション・エクスプレッションの特徴):
アニメーションを巻き戻した時点で実行される。
またはパーティクルが放出されるフレームで実行される。
0 件のコメント:
コメントを投稿