以前説明した パーティクル はエミッターによって発生と動きのアニメーションを自動的に行なうことができるが、
同時に個々のパーティクルのアトリビュートを変化させることはできなかった。
そこで、一つ一つのパーティクルのアトリビュートを変化させながら、アニメーションを実行させるには dynExpression コマンドを使用する。
アトリビュートを変化させるエクスプレッションの式には
エクスプレッション
で説明した frame や time などの変数が使用できる。
一つ一つのパーティクルの番号を指定するためには particleId などの変数を使用する。
(最初に作られたパーティクルの番号 particleId は 0 で、以下発生した順に1, 2, 3, ... と番号がついてゆく)
パーティクルの主なアトリビュートは以下の通りである。
長い名前 (短い名前) | 型 | デフォールト値 | 説明 |
---|---|---|---|
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 | ハードウェアレンダリングの方法 |
パーティクルの色を赤から徐々に黒にしてゆくエクスプレッションを使ったプロシージャー。
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];
}
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];