フィールドによって自然界にある様々な力をシュミレートしてアニメーションを実行することができる。
作られたフィールドはconnectDynamic -fieldsによってパーティクルなどにコネクトする。
以下のプロシージャーによってエミッターから発生するパーティクルがairフィールドによって飛ばされる。
global proc makeField1()
{
particle -p 0 5 0;
string $ename[] = `emitter -type "direction" -dx 0.0 -dy -1.0 -dz 0.0 -spread 0.2 -rate 3`;
string $pname[] = `particle`;
connectDynamic -emitters $ename[0] $pname[0];
string $aname[] = `air -pos 3 0 0 -maxDistance 5.0 -magnitude 1.0 -dx -1.0 -dy 0.0 -dz 0.0`;
connectDynamic -fields $aname[0] $pname[0];
}
particle -p 0 5 0;
パーティクルを(0, 5, 0)の位置に作る。
(パーティクルの発生源)
string $ename[] = `emitter -type "direction" -dx 0.0 -dy -1.0 -dz 0.0 -spread 0.2 -rate 3`;
そのパーティクルに対してY軸に対して下方向に発生・運動するエミッターを作り、作られたエミッターの名前を$ename(配列)に代入する。
string $pname[] = `particle`;
emitterによって発生させられるパーティクルを作る。
connectDynamic -emitters $ename[0] $pname[0];
emitter($ename[0])とパーティクル($pname[0])をコネクトしてパーティクルを発生させる。
string $aname[] = `air -pos 3 0 0 -maxDistance 5.0 -magnitude 1.0 -dx -1.0 -dy 0.0 -dz 0.0`;
airフィールド作る。(スタンドアローンフィールド)
connectDynamic -fields $aname[0] $pname[0];
airフィールド($aname)をパーティクル($pname)にコネクトする。
これでパーティクルがairフィールドによって影響されるようになる。
以下のプロシージャーによってエミッターから発生するパーティクルがnewtonフィールドによってnurbsPlaneの中に吸い込まれてゆく。
global proc makeField2()
{
particle -p 5 10 0;
string $ename[] = `emitter -type "direction" -dx 0.0 -dy -1.0 -dz 0.0 -spread 0.2 -rate 3`;
string $pname[] = `particle`;
connectDynamic -emitters $ename[0] $pname[0];
nurbsPlane;
scale 0 10 10;
string $nname[] = `newton -magnitude 1.0 -maxDistance 8.0 -attenuation 0.98`;
connectDynamic -fields $nname[0] $pname[0];
}
スクリプトの前半はmakeField1.melと同じなので、後半のみ解説する。
nurbsPlane
フィールドを追加するためのnurbsPlaneをみる。
scale 0 10 10;
アニメーションを見やすくするために、適当にスケールをかける。
string $nname[] = `newton -magnitude 1.0 -maxDistance 8.0 -attenuation 0.98`;
nurbsPlaneに属するフィールドを作成する。(オブジェクトフィールド)
connectDynamic -fields $nname[0] $pname[0];
newtonフィールド($nname)をパーティクル($pname)にコネクトする。
これでパーティクルがnewtonフィールドによって影響されるようになる。
makeField3(速度, X方向, Y方向, Z方向)
makeField4(強さ, 最大距離, 力の変化)