以前説明した パーティクル はエミッターによって発生と動きのアニメーションを自動的に行なうことができるが、
同時に個々のパーティクルのアトリビュートを変化させることはできなかった。
そこで、一つ一つのパーティクルのアトリビュートを変化させながら、アニメーションを実行させるにはdynExpressionコマンドを使用する。
アトリビュートを変化させるエクスプレッションの式には
エクスプレッション
で説明したframeやtimeなどの変数が使用できる。
一つ一つのパーティクルの番号を指定するためにはparticleIdなどの変数を使用する。
(最初に作られたパーティクルの番号particleIdは0で、以下発生した順に1, 2, 3, ... と番号がついてゆく)
パーティクルの色を赤から徐々に黒にしてゆくエクスプレッションを使ったプロシージャー。
以下のMELスクリプトをdynExpression1.melという名前で作り、スクリプトエディターからdynExpression1();で実行すると、アニメーションさせると発生したパーティクルが赤色から黒色に変化しながら広がってゆく。
プレイバックさせる時はシェーディング(Flat, Smooth)をかけておかないと色が見えない事に注意すること。
global proc dynExpression1()
{
particle -p 0 0 0;
emitter -type "direction" -dx 0 -dy 1 -dz 0 -spread 0.5 -rate 10 -n emitter;
particle -n particle2;
addAttr -longName rgbPP -dt vectorArray particle2Shape;
dynExpression -creation -string "rgbPP = << 1, 0, 0 >>;" particle2Shape;
dynExpression -runtime -string "rgbPP = rgbPP * 0.995;" particle2Shape;
connectDynamic -emitters emitter particle2;
}
以下はプロシージャーの説明である。
particle -p 0 0 0;
パーティクルを(0, 0, 0)の位置に作る。
emitter -type "direction" -dx 0 -dy 1 -dz 0 -spread 0.5 -rate 10 -n emitter;
そのパーティクルに対してY方向に発生・運動するエミッターをemitterという名前で作る。
particle -n particle2;
emitterによって発生されるパーティクルをparticle2という名前で作る。
addAttr -longName rgbPP -dt vectorArray particle2Shape;
particle2のシェィプオブジェクトparticle2ShapeにrgbPP(型はベクトル)というアトリビュートを加える。
dynExpression -creation -string "rgbPP = << 1, 0, 0 >>;" particle2Shape;
パーティクルが発生した時の色を赤( << 1, 0, 0 >> )にする。
dynExpression -runtime -string "rgbPP = rgbPP * 0.995;" particle2Shape;
アニメーションが進むたびに色の値に0.995を乗算して色の値を小さくしてゆく。
connectDynamic -emitters emitter particle2;
emitterとparticle2をコネクトしてパーティクルを発生させる。