ゴール

ゴールとは

ゴール(Goal)とはパーティクルが目標とするオブジェクトのことである。
ゴールを設定すると、パーティクルと目標の物体の間にスプリングがついているかのようなアニメーションを作成することができる。
カーブオンサーフェイスを除くすべてのオブジェクトをゴールにすることができる。
また、ひとつのパーティクルに対してゴールを複数対応させることもできる。
ゴールは goal コマンドによって作られる。

goalのフラグ

-goal string
ゴールとするオブジェクトの名前(string)
-weight float
goalが影響する度合(0.0 〜 1.0)
0.0だと影響なし、1.0だと正確にゴールを目指す

goalコマンドの使用例

エミッターから発生したパーティクルが nurbsPlane に向かって移動し最後に nurbsPlane で止まるアニメーション。

  1. 以下の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;
    }
    
  2. Script EditorFile → Source Script によって makeGoal1.mel を読み込む。
  3. Script Editor の下のウインドウから makeGoal1(); と打ち込んで実行する。
    [makeGoal1.mel の実行図]
  4. プレイバックしてアニメーションを実行する。
    [makeGoal1.mel のアニメーション実行図]

スクリプトの解説

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];

練習

練習課題

参考


Prev | Next
Home | Contents
Mail