ダイナミック・エクスプレッション

dynExpressionコマンド

以前説明した パーティクル エミッターによって発生と動きのアニメーションを自動的に行なうことができるが、 同時に個々のパーティクルのアトリビュートを変化させることはできなかった。
そこで、一つ一つのパーティクルのアトリビュートを変化させながら、アニメーションを実行させるにはdynExpressionコマンドを使用する。
アトリビュートを変化させるエクスプレッションの式には エクスプレッション で説明したframetimeなどの変数が使用できる。
一つ一つのパーティクルの番号を指定するためにはparticleIdなどの変数を使用する。 (最初に作られたパーティクルの番号particleIdは0で、以下発生した順に1, 2, 3, ... と番号がついてゆく)

dynExpressionコマンドのオプション

-string "expression"
エクスプレッションの式を定義する。
-creation
パーティクルが生成される時、エクスプレッションの式を実行する。
-runtime
アニメーションを実行している時、エクスプレッションの式を実行する。

パーティクルのアトリビュート

パーティクルの主なアトリビュートは以下の通りである。

長い名前 (短い名前) デフォールト値 説明
position (pos) vectorArray empty Runtime における個々のパーティクルの位置
velocity (vel) vectorArray empty Runtime における個々のパーティクルの速度
acceleration (acc) vectorArray empty Runtime における個々のパーティクルの加速度
age (ag) doubleArray empty 個々のパーティクルの寿命
particleId (id) doubleArray empty 個々のパーティクルの番号
maxCount (mxc) long -1 パーティクルの最大個数
renderType (rt) enum 3 ハードウェアレンダリングの方法

dynExpressionコマンドの使用例1

パーティクルの色を赤から徐々に黒にしてゆくエクスプレッションを使ったプロシージャー。

  1. 以下のMELスクリプトをdynExpression1.melという名前で作る。
    global proc dynExpression1()
    {
    	particle -p 0 0 0;
    	string $ename[] = `emitter -type "direction" -dx 0.0 -dy 1.0 -dz 0.0 -spread 0.5 -rate 10`;
    	string $pname[] = `particle`;
    	addAttr -longName rgbPP -dataType vectorArray $pname[1];
    	dynExpression -creation -string "rgbPP = << 1.0, 0.0, 0.0 >>;" $pname[1];
    	dynExpression -runtime -string "rgbPP = rgbPP * 0.995;" $pname[1];
    	connectDynamic -emitters $ename $pname[0];
    }
    
  2. Script Editorの File -> Source Script によってdynExpression1.melを読み込む。
  3. Script Editorの下のウインドウからdynExpression1();と打ち込んで実行する。
  4. プレイバックする。
    プレイバックさせる時はシェーディング(Flat, Smooth)をかけておかないと色が見えない事に注意すること。

    上図はわかりやすくするためにパーティクルのParticle Render TypeアトリビュートをSpheresに変えて表示している。

練習

練習課題

参考


Prev
Home | Contents
abe@injapan.net