ゴール
ゴールとは
ゴール(Goal)とはパーティクルが目標とするオブジェクトのことである。
ゴールを設定すると、パーティクルと目標の物体の間にスプリングがついているかのようなアニメーションを作成することができる。
カーブオンサーフェイスを除くすべてのオブジェクトをゴールにすることができる。
また、ひとつのパーティクルに対してゴールを複数対応させることもできる。
ゴールは goal コマンドによって作られる。
goalのフラグ
- -goal string
-
ゴールとするオブジェクトの名前(string)
- -weight float
-
goalが影響する度合(0.0 〜 1.0)
0.0だと影響なし、1.0だと正確にゴールを目指す
goalコマンドの使用例
エミッターから発生したパーティクルが nurbsPlane に向かって移動し最後に nurbsPlane で止まるアニメーション。
- 以下のMELスクリプトを makeGoal1.mel という名前で作る。
global proc makeGoal1()
{
string $plname[] = `nurbsPlane`;
scale 0 5 5;
string $ename[] = `emitter -pos 0.0 5.0 5.0 -type "direction" -dx 0.0 -dy -1.0 -dz 0.0 -spread 0.5 -rate 3`;
string $pname[] = `particle`;
connectDynamic -emitters $ename[0] $pname[0];
goal -goal $plname[0] -weight 0.1 $pname[0];
setAttr ($pname[0] + ".conserve") 0.99;
}
- の によって makeGoal1.mel を読み込む。
- の下のウインドウから makeGoal1(); と打ち込んで実行する。
- プレイバックしてアニメーションを実行する。
スクリプトの解説
-
string $plname[] = `nurbsPlane`;
- goal となる nurbsPlane を作る。
NURBS オブジェクトをゴールにした場合は、NURBS 上の各 CV がパーティクルのゴールになる。
-
scale 0 5 5;
- nurbsPlane をY, Z方向に5倍づつスケールをかける。
-
string $ename[] = `emitter -pos 0.0 5.0 5.0 -type "direction" -dx 0.0 -dy -1.0 -dz 0.0 -spread 0.5 -rate 3.0`;
- パーティクルを発生させるためのエミッターを作る。
- -pos 0.0 5.0 5.0
- エミッターの位置は(0.0, 5.0, 5.0)。
- -type "direction"
- エミッターのタイプは direction (一方向にパーティクルが発生)。
- -dx 0.0 -dy -1.0 -dz 0.0
- パーティクルが発生する方向は(0.0, -1.0, 0.0) (Y軸下向き)。
- -spread 0.5
- パーティクルを発生させる角度。
0.0 から 1.0 が 0 度から 90 度にあたるので、この場合(0.5)は 45 度になる。
- -rate 3.0
- パーティクルが発生する割合。
単位時間あたり 3.0 個になる。
-
string $pname[] = `particle`;
- エミッターによって発生するパーティクルを作る。
-
connectDynamic -emitters $ename[0] $pname[0];
- パーティクル($pname[0])をエミッター($ename[0])とコネクトしてエミッターからパーティクルが発生するようにする。
-
goal -goal $plname[0] -weight 0.1 $pname[0];
- nurbsPlane($plname[0])を目標としてパーティクル($pname[0])が吸い込まれてゆくように goal を作る。
-
setAttr ($pname[0] + ".conserve") 0.99;
- パーティクル($pname[0])の conserve アトリビュートに 0.99 を設定する。
これによってパーティクルがゴールへ向かって動く時の振動の度合がコントロールされる。
0.0 に近いほど振動が少なく、1.0 に近付くほど振動が大きくなる。
他のフィールドとの組合せ
上の makeGoal1.mel の goal コマンドの後に以下のようなフィールドコマンドを追加してやるとさらに複雑なアニメーションになる。
string $tname[] = `turbulence -pos 0 0 0 -magnitude 1.0 -attenuation 0.0`;
connectDynamic -f $tname[0] $pname[0];
練習
- 使用例の makeGoal1.mel を参考にして、makeGoal2.mel を作り goal の影響する値(-weight )の値、エミッターの位置(-pos)を引数で変化させることができるようにしてみよう。
makeGoal2(float goalの影響する値, float エミッターのX座標, float エミッターのY座標, float エミッターのZ座標)
(例)
makeGoal2(0.05, 5.0, 3.0, 2.0)
プレイバック実行後
練習課題
参考
Prev | Next
Home | Contents
Mail