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

dynExpression() 関数

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

dynExpression 関数のフラグ

string=エクスプレッションの式
エクスプレッションの式を文字列で定義します。
creation=True
パーティクルの生成時に、エクスプレッションの式を実行します。
runtimeBeforeDynamics=True
パーティクルの生成後、ダイナミクスが実行される前にエクスプレッションの式を実行します。
runtimeAfterDynamics=True
パーティクルの生成後、ダイナミクスが実行された後でエクスプレッションの式を実行します。

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

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

長い名前 (短い名前) デフォールト値 説明
position (pos) vectorArray empty Runtime における個々のパーティクルの位置(ローカル座標)
worldPosition (wps) vectorArray empty Runtime における個々のパーティクルの位置(ワールド座標)
velocity (vel) vectorArray empty Runtime における個々のパーティクルの速度(ローカル座標)
worldVelocity (wvl) vectorArray empty Runtime における個々のパーティクルの速度(ワールド座標)
centroid (ctd) double3 empty パーティクルの平均位置(ローカル座標)
worldCentroid (wctn) double3 empty パーティクルの平均位置(ワールド座標)
acceleration (acc) vectorArray empty Runtime における個々のパーティクルの加速度
age (ag) doubleArray empty 個々のパーティクルの寿命
particleId (id) doubleArray empty 個々のパーティクルの番号
maxCount (mxc) long -1 パーティクルの最大個数
renderType (rt) enum 3 ハードウェアレンダリングの方法
ダイナミックアトリビュートについては dynExpression1.py の解説を参照してください。

dynExpression 関数の使用例1

エミッターから発生したパーティクルの色を、 赤から徐々に黒にしてゆくダイナミック・エクスプレッションを使った 関数を作ってみましょう。

  1. 以下の MEL スクリプトをPyMELスクリプトに書き換えて dynExpression1.py という名前で作ります。
    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 -runtimeAfterDynamics -string "rgbPP = rgbPP * 0.995;" $pname[1];
    	connectDynamic -emitters $ename $pname[0];
    }
    
  2. スクリプト エディタ の ファイル → スクリプトのロード によって dynExpression1.py を読み込んで、テンキーの Enter キーなどで実行します。
  3. スクリプト エディタ のインプットウインドウにdynExpression1()と打ち込んで実行します。
  4. プレイバックを実行します。
    プレイバックさせる時はシェーディング(フラット または スムース)をかけておかないと色が見えない事に注意してください。
    [dynExpression1() の実行図]
    上図はわかりやすくするためにパーティクルの パーティクルのレンダータイプ アトリビュートを 球体 に変えて表示しています。

練習

参考


Prev | Next
Home | Contents
Mail