ON-BLOG

CGのこと、あれこれ書いてます。

XSIユーザーから観た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 -runtimeAfterDynamics -string "rgbPP = rgbPP * 0.995;" $pname[1];
	connectDynamic -emitters $ename $pname[0];
}

f:id:tommy_on:20130623224253p:plain
黒に変わってますね~。
では細かい説明を。

string $ename[] = `emitter -type "direction" -dx 0.0 -dy 1.0 -dz 0.0 -spread 0.5 -rate 10`;

directionタイプで1.0となってるYだけパーティクルが飛ぶエミッターを作成。spreadは広がり

addAttr -longName rgbPP -dataType vectorArray $pname[1];

rgbPPというアトリビュートをベクトル配列で作成この「rgbPP」とはポイント、球等の場合のみ使える値である。
またその他にも「goalPP」「lifespanPP」「opacityPP」「radiusPP」等がある。
詳細は簡易ですが、以下のとおり。
「goalPP」------ゴールに追従する度合いを指定
「lifespanPP」--パーティクル寿命を指定
「opacityPP」---まんま、不透明度を指定
「radiusPP」----パーティクルの半径を指定。

dynExpression -creation -string "rgbPP = << 1.0 , 0.0 , 0.0 >>;" $pname[1];

訳していくとわかりやすいかも。
「作られる時はRGBPPの値は<<1.0,0.0,0.0>>要は赤色です」と式に組み込んでるわけです。

dynExpression -runtimeAfterDynamics -string "rgbPP = rgbPP * 0.995;" $pname[1];

続いてここも訳して書いてみます。
「runtimeAfterDynamics」は一連の処理後という意味らしい?あってる?フレーム計算の最後って事だと思います。
ということから、
「ダイナミクス(フレーム)計算後、rgbPPの値にそれぞれ(0.995)をかけます。」となってます。
なので、0F目はR1.0 G0.0 B0.0 1F目R0.995 G0.0 B0.0 2F目R0.990025 G 0.0 B0.0 ~ 20F目かな?R0.905 B0.0 G0.0
という用に少しずつ減色してます。
こうする事で徐々に色が変わるなどの魅せ方ができるようになります。

connectDynamic -emitters $ename $pname[0];

リンク付け部分ですね。
とまぁこんな感じでできますね。



そしてそれの応用版。
色変えを引数で変えれるように設定。

global proc dynExpression1(float $R , float $G , float $B)
{
	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 = <<" + $R +","+ $G + "," + $B + ">>;") $pname[1];
	dynExpression -runtimeAfterDynamics -string "rgbPP = rgbPP * 0.995;" $pname[1];
	connectDynamic -emitters $ename $pname[0];
}

f:id:tommy_on:20130623224443p:plain
色が変更できるようになってます。

これは引数が追加されたのと、
エクスプレッション内引数を入れる場合は「()」して「""」がそれぞれ必要。
そいや、こうしないさいとあった。
「"ty = 3 * sin(time + 1.0);"」この「1.0」の変数「$val」を入れる場合は、
まず変数を入れる

「"ty = 3 * sin(time + $val);"」んで次に左右に「"+"」だけ足す。

「"ty = 3 * sin(time + " + $val + ");"」最後に一番左右に「()」で括る

「("ty = 3 * sin(time + " + $val + ");")」
これは便利。
いつも文字列の結合むやむやしてたんで。

こんな感じでした。

次はフィールドについて書いてみます。
フィールドってSIでいう、フォースですね。


では…