パーティクル

particle コマンド

パーティクルは、大きさの無い点の集まりです。
パーティクルを作成するには maya.cmds.particle() 関数を使用し、 p フラグの後にパーティクルの位置を表す座標値をつけて、 必要な個数だけパーティクルを作ります。 particle 関数を 1 回実行すると、 p フラグに与えられた個数分のパーティクルが作られます。 それらの複数のパーティクルが、 ひとつのパーティクルオブジェクトとしてグループ化され、 トランスフォームノードによってコントロールされるようになります。
例えば、
maya.cmds.particle(p=((0 0 1), (1 0 0)))
という関数を実行することによって、(0, 0, 1) と (1, 0, 0) の 2 点にパーティクルが作られます。 ここで translateX のアトリビュートの値を +1 すると、 2 つのパーティクルの位置が (1, 0, 1)、(2, 0, 0) に移動します。
パーティクル 1 つ 1 つの、 位置やその他のアトリビュートをコントロールしたい時は、 ダイナミック・エクスプレッション を使用します。

particle 関数のフラグ

p=((x, y, z), ...)
1 個のパーティクルの座標値を(x, y, z)で指定します。
count
パーティクルの個数を調べます。(query といっしょに使用します)
particleId=id番号
パーティクルのアトリビュートを調べる時の id 番号を指定します。(query と同時に使用します)
order=番号
(番号)番目のパーティクルのアトリビュートを調べる時に指定します。(query と同時に使用します)
番号は 0 から始まります。
attribute=アトリビュート
パーティクルのアトリビュートを調べる時に指定します。(query と同時に使用)
query
パーティクルの様々な値を得るために使用します。

particle 関数の使用例

以下のプロシージャーを makeParticle1.py と言うファイルに書き込んで実行してみましょう。
このプロシージャーでは 10 個のパーティクルを発生させています。
各パーティクルの座標値は乱数によって決めていますが、 その座標値を代入しておく変数を個数分用意しないで、 particle() 関数を文字列の結合によって生成し、 その関数を表す文字列を最期に実行しています。 この方法をとることによって、 作られるパーティクルの個数を変えたい時にもプログラムの書き換えを最小限で済ませることができるようになります。

  1. 以下の MEL スクリプトを Python スクリプトに書き直して、 makeParticle1.py という名前で保存します。
    global proc makeParticle1()
    {
    	int $i;
    	float $x, $y, $z;
    	string $points = "";
    
    	for($i = 0; $i < 10; $i++)
    	{
    		$x = rand(-5.0, 5.0);
    		$y = rand(-5.0, 5.0);
    		$z = rand(-5.0, 5.0);
    		$points = $points + "-p " + $x + " " + $y + " " + $z + " ";
    	}
    	eval("particle " + $points);
    }
    
  2. スクリプト エディタ の ファイル → スクリプトのロード によって makeParticle1.py を読み込んで、テンキーの Enter キーなどで実行します。
  3. スクリプト エディタ で以下の関数を実行してみます。
    makeParticle1()
    [makeParticle1() の実行結果]
    上図はわかりやすくするためにパーティクルの particleRenderType アトリビュートを 球体 に変えて表示しています。
    そのためには、パーティクルのアトリビュートエディタを開いて、 レンダー アトリビュート → パーティクルのレンダータイプ を 球体 に変更します。

もし、makeParticle1.py で文字列の結合を使用しないで、 座標の個数分の変数(配列)を用意してプログラムを作るとどうなるでしょうか ?

練習

参考


Prev | Next
Home | Contents
Mail