XSIユーザーから観たMELスクリプトについて 其の十四
続いてはパーティクル。
Melでパーティクルを制御するんですね。
あ、SI版は無しで。やりかた全くわかんないんです。
また探ってみます。
ではコード
global proc makeParticle3(int $num, float $XR , float $YR , float $ZR ,int $type) { int $i; float $x , $y , $z; string $points = ""; for($i = 0 ; $i < $num ; $i++) { $x = rand(-($XR),$XR); $y = rand(-($YR),$YR); $z = rand(-($ZR),$ZR); $points = $points + "-p " + $x + " " + $y + " " + $z + " "; } eval("particle " + $points); string $sel[] = `ls -sl`; setAttr ($sel[0] + ".particleRenderType") $type; }
パーティクルをランダムで配置するスクリプトです。
単純に配置してるだけです。。。。。。
あ、ここ注意↓
「$points = $points + "-p " + $x + " " + $y + " " + $z + " ";
ここスペースがある事に注意が必要。
あと表示タイプは任意で決めてれます。
次はエミッターを使ったパーティクル処理。
particle -p 1 0 0 -p 0 1 0 -p 0 0 1; string $name[] = `emitter -rate 10 -minDistance 1.5 -maxDistance 2.5; particle; connectDynamic -emitters $name[0];
particle -p 1 0 0 -p 0 1 0 -p 0 0 1;
この位置からパーティクルを発生位置を決定 = (①X1 Y0 Z0②X0 Y1 Z0③X0 Y0 Z1)
string $name[] = `emitter -rate 10 -minDistance 1.5 -maxDistance 2.5;
エミッターの設定 レート10 1.5から発生して2.5で終了する設定を変数に格納
particle;
空のパーティクルを作成
connectDynamic -emitters $name[0];
エミッターとリンクして、発生させる。
次、選択物をエミッターにする方法。
「選択から発生」と同じですね。
global proc makeEmitter1() { string $name[] = `sphere`; scale 5 5 5; expression -object $name[0] -string "ry = 30 * time"; string $ename[] = `emitter -type "surface" -normalSpeed 1.0 -tangentSpeed 0.0 -rate 1 $name[0]`; string $pname[] = `particle`; expression -object $pname[0] -string "ry = 30 * time"; connectDynamic -emitters $ename $pname[0]; }
いっぱい出てますねw
中心には球体があります。
これから発生してるんです。
では下記に説明。
expression -object $name[0] -string "ry = 30 * time";
スフィア回してます。
■「string $ename[] = `emitter -type "surface" -normalSpeed 1.0 -tangentSpeed 0.0 -rate 1 $name[0]`;
エミッターの設定 法線スピードを1.0 接線スピード0レートを1
string $pname[] = `particle`;
空のパーティクル作成
expression -object $pname[0] -string "ry = 30 * time";
パーティクル自体を回す。
connectDynamic -emitters $ename $pname[0];
リンク付け。
エミッターに関する記載が増えたぐらいで、
大きくは変わらないです。
エミッター部分でもう一個応用。
global proc makeEmitter1() { string $name[] = `ls -sl`; expression -object $name[0] -string "ry = 30 * time"; expression -object $name[1] -string "ry = 30 * time"; string $ename[] = `emitter -type "surface" -normalSpeed 1.0 -tangentSpeed 0.0 -rate 1 $name[0]`; string $ename2[] = `emitter -type "surface" -normalSpeed 1.0 -tangentSpeed 0.0 -rate 1 $name[1]`; string $pname[] = `particle`; string $pname2[] = `particle`; expression -object $pname[0] -string "ry = 30 * time"; expression -object $pname2[0] -string "ry = 30 * time"; connectDynamic -emitters $ename $pname[0]; connectDynamic -emitters $ename2 $pname2[0]; }
選択したオブジェクトから発生させるってやつ。
単純に2個増やしただけやけど大丈夫なのか?
まぁコード的にもそんな変わらないんでこのまま行きます。
と言いましたが、一旦ここで閉じます。
では…