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

dynExpressionコマンド

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

dynExpressionコマンドのオプション

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

dynExpressionコマンドの使用例1

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

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;
}
  1. particle -p 0 0 0; パーティクルを(0, 0, 0)の位置に作る。
  2. emitter -type "direction" -dx 0 -dy 1 -dz 0 -spread 0.5 -rate 10 -n emitter; そのパーティクルに対してY方向に発生・運動するエミッターをemitterという名前で作る。
  3. particle -n particle2; emitterによって発生されるパーティクルをparticle2という名前で作る。
  4. addAttr -longName rgbPP -dt vectorArray particle2Shape; particle2のシェィプオブジェクトparticle2ShapeにrgbPP(型はベクトル)というアトリビュートを加える。
  5. dynExpression -creation -string "rgbPP = << 1, 0, 0 >>;" particle2Shape; パーティクルが発生した時の色を赤( << 1, 0, 0 >> )にする。
  6. dynExpression -runtime -string "rgbPP = rgbPP * 0.995;" particle2Shape; アニメーションが進むたびに色の値に0.995を乗算して色の値を小さくしてゆく。
  7. connectDynamic -emitters emitter particle2; emitterとparticle2をコネクトしてパーティクルを発生させる。

dynExpressionコマンドの使用例2

パーティクルの値が赤と黒の間を変化してゆくエクスプレッションを使ったプロージャー。

global proc dynExpression2()
{
	$name = `particle -p 0 0 0`;
	emitter -type "direction" -dx 0 -dy 1 -dz 0 -spread 0.5 -rate 10 -n emitter $name[0];
	$name = `particle`;
	addAttr -longName rgbPP -dt vectorArray $name[1];
	dynExpression -runtime -string "rgbPP = << 1, 0, 0 >> * (sin(time) + 1)/2;" $name[1];
	connectDynamic -emitters emitter $name[0];
}
  1. particle -p 0 0 0; パーティクルを(0, 0, 0)の位置に作る。
  2. emitter -type "direction" -dx 0 -dy 1 -dz 0 -spread 0.5 -rate 10 -n emitter $name[0]; そのパーティクルに対してY方向に発生・運動するエミッターをemitterという名前で作る。
  3. $name = `particle`; emitterによって発生されるパーティクルを作って、その名前を$nameという変数に代入しておく。
    $nameの内容は以下のようになる。
    $name[0] = "particle2";
    $name[1] = "particleShape2";
  4. addAttr -longName rgbPP -dt vectorArray $name[1]; particle2のシェィプオブジェクトparticleShape2にrgbPP(型はベクトル)というアトリビュートを加える。
  5. dynExpression -runtime -string "rgbPP = << 1, 0, 0 >> * (sin(time) + 1)/2;" $name[1]; 色の値を時間が進むにしたがって赤( << 1, 0, 0 >> ) に (sin(time) + 1)/2 という値を乗算した値(ベクトル)にする。
  6. connectDynamic -emitters emitter $name[0]; emitterとparticle2をコネクトしてパーティクルを発生させる。

dynExpressionコマンドの使用例3

パーティクル(球)の一つ一つの色がランダムな感じで赤と黒の間を変化してゆくエクスプレッションを使ったプロージャー。

global proc dynExpression3()
{
	$name = `particle -p 0 0 0`;
	emitter -type "direction" -dx 0 -dy 1 -dz 0 -spread 0.5 -rate 10 -n emitter $name[0];
	$name = `particle`;
	setAttr ($name[1] + ".particleRenderType") 4;
	addAttr -longName rgbPP -dt vectorArray $name[1];
	dynExpression -runtime -string "rgbPP = << (sin(time * (particleId % 10)) + 1)/2, 0, 0>>;" $name[1];
	connectDynamic -emitters emitter $name[0];
}
  1. particle -p 0 0 0; パーティクルを(0, 0, 0)の位置に作る。
  2. emitter -type "direction" -dx 0 -dy 1 -dz 0 -spread 0.5 -rate 10 -n emitter; そのパーティクルに対してY方向に発生・運動するエミッターをemitterという名前で作る。
  3. $name = `particle`; emitterによって発生されるパーティクルを作って、その名前を$nameという変数に代入しておく。
  4. setAttr ($name[1] + ".particleRenderType") 4; パーティクルの形を球にする。
    パーティクルのアトリビュートparticleRenderTypeの値と、その値が表す形は以下の通り。
    particleRenderTypeshape
    0 MultiPoint
    1 MultiStreak
    2 Numeric
    3 Points
    4 Spheres
    5 Sprites
    6 Streak
    7 Blobby Surface
    8 Cloud
    9 Tube
  5. addAttr -longName rgbPP -dt vectorArray $name[1]; particle2のシェィプオブジェクトparticleShape2にrgbPP(型はベクトル)というアトリビュートを加える。
  6. dynExpression -runtime -string "rgbPP = << (sin(time * (particleId % 10)) + 1)/2, 0, 0>>;" $name[1]; 色の値を時間が進むにしたがって赤( << 1, 0, 0 >> ) と黒( << 0, 0, 0 >> )の間を変化してゆくようににエクスプレッションを設定する。
  7. connectDynamic -emitters emitter $name[0]; emitterとparticle2をコネクトしてパーティクルを発生させる。

dynExpressionコマンドの使用例4

一つ一つのパーティクルが波状に上がって行くアニメーションを作るプロージャー。
positionアトリビュート(ベクトル)をsin関数によって計算させている。

global proc makeEmitter4()
{
	particle -p 0 0 0;
	emitter -type "direction" -dx 0 -dy 1 -dz 0 -spread 0.5 -rate 10 -n emitter;
	$name = `particle`;
	dynExpression -runtime
		-string "position = << sin(time * particleId / 20),
					particleId * time / 20, 0>>;" $name[1];
	connectDynamic -emitters emitter $name[0];
}
  1. particle -p 0 0 0; パーティクルを(0, 0, 0)の位置に作る。
  2. emitter -type "direction" -dx 0 -dy 1 -dz 0 -spread 0.5 -rate 10 -n emitter; そのパーティクルに対してY方向に発生・運動するエミッターをemitterという名前で作る。
  3. $name = `particle`; emitterによって発生されるパーティクルを作って、その名前を$nameという変数に代入しておく。
  4. dynExpression -runtime -string "position = << sin(time * particleId / 20), particleId * time / 20, 0>>;" $name[1]; 個々のパーティクルの位置(position)を変化させるエクスプレッションを定義する。
  5. connectDynamic -emitters emitter $name[0]; emitterとparticle2をコネクトしてパーティクルを発生させる。

練習

参考


Prev | Next
Home | Contents
abe@injapan.net