フィールドを使うことによっては、
自然界にある様々な力をシュミレートしてアニメーションを実行することができます。
フィールドは、ソフトボディ・リジッドボディ・パーティクルに作用します。
ソフトボディ・リジッドボディについての詳しいことは、
マニュアルまたは、他の章を参照してください。
MEL において、オブジェクトにフィールドを作用させるためには、
以下のコマンドでパーティクル・ソフトボディ・リジッドボディなどにコネクトする必要があります。
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];
}
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];
エミッターから発生するパーティクルが 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;
scale 0 10 10;
string $nname[] = `newton -magnitude 1.0 -maxDistance 8.0 -attenuation 0.98`;
connectDynamic -fields $nname[0] $pname[0];
global proc makeGravity()
{
string $ename[] = `emitter -pos 0 0 0 -type "direction" -dx 0 -dy 1 -dz 0 -spread 0.2 -speed 15.0 -rate 100`;
string $pname[] = `particle`;
connectDynamic -emitters $ename[0] $pname[0];
string $gname[] = `gravity -pos 0 0 0 -magnitude 9.8 -dx 0 -dy -1 -dz 0`;
connectDynamic -f $gname[0] $pname[0];
}
global proc makeDrag()
{
string $ename[] = `emitter -pos 0 0 0 -type "direction" -dx 0 -dy 1 -dz 0 -spread 0.2 -rate 3`;
string $pname[] = `particle`;
connectDynamic -emitters $ename[0] $pname[0];
string $dname[] = `drag -pos 0 0 0 -magnitude 0.3 -dx 0 -dy 1 -dz 0`;
connectDynamic -f $dname[0] $pname[0];
}
global proc makeRadial()
{
string $ename[] = `emitter -pos 0 0 0 -type "direction" -dx 0 -dy 1 -dz 0 -spread 0.2 -rate 3`;
string $pname[] = `particle`;
connectDynamic -emitters $ename[0] $pname[0];
string $rname[] = `radial -pos -2 5 0 -magnitude -2.0 -maxDistance 3.0`;
connectDynamic -f $rname[0] $pname[0];
}
global proc makeTurbulence()
{
string $ename[] = `emitter -pos 0 0 0 -type "direction" -dx 0 -dy 1 -dz 0 -spread 0.2 -rate 3`;
string $pname[] = `particle`;
connectDynamic -emitters $ename[0] $pname[0];
string $tname[] = `turbulence -pos 0 5 0 -magnitude 2.0 -maxDistance 3.0`;
connectDynamic -f $tname[0] $pname[0];
}
global proc makeUniform()
{
string $ename[] = `emitter -pos 0 0 0 -type "direction" -dx 0 -dy 1 -dz 0 -spread 0.2 -rate 3`;
string $pname[] = `particle`;
connectDynamic -emitters $ename[0] $pname[0];
string $uanme[] = `uniform -pos -2 5 0 -magnitude 2.0 -maxDistance 3.0`;
connectDynamic -f $uanme[0] $pname[0];
}
global proc makeVortex()
{
string $ename[0] = `emitter -pos 0 0 0 -type "direction" -dx 0 -dy 1 -dz 0 -spread 0.2 -rate 50`;
string $pname[] = `particle`;
connectDynamic -emitters $ename[0];
string $vname[] = `vortex -pos 0 0 0 -magnitude 0.15 -maxDistance 30.0 -ax 0 -ay 1.0 -az 0`;
connectDynamic -f $vname[0] $pname[0];
}
課題ボタンは授業2時間目の開始時に表示される。
授業終了30分後に課題ボタンの表示が消えるので注意すること。
授業時間後に課題を提出したい者は、他の全クラスの授業が終了するまで待って、ボタンが表示されてから提出すること。
(全クラスの授業が終了するまでボタンは表示されない。)