コリジョン(collision)によってパーティクルとオブジェクト(ポリゴン、NURBS)との衝突をシュミレーションしてアニメーションを実行できる。
collisionコマンドで作られたコリジョンオブジェクトはconnectDynamic -collisionsによってパーティクルなどにコネクトする。
エミッターから発生したパーティクルがnurbsPlaneに衝突して跳ね返りながら落ちてゆくプログラム。
以下のスクリプトをmakeCollision1.melという名前で作り、makeCollision1();によって実行させてみよう。
global proc makeCollision1()
{
$name1 = `emitter -pos 0 5 0 -type "direction" -dx -1 -dy -1 -dz 0 -spread 0.5 -rate 3`;
$name2 = `particle`;
connectDynamic -emitters $name1[0];
$name3 = `nurbsPlane`;
scale 0 15 15;
rotate 0 0 45;
collision -resilience 0.3 -friction 0.1 $name3[0] $name2[0];
$name1 = `gravity -pos 0 0 0`;
connectDynamic -fields $name1[0] $name2[0];
connectDynamic -collisions $name3[0] $name2[0];
}
$name1 = `emitter -pos 0 5 0 -type "direction" -dx -1 -dy -1 -dz 0 -spread 0.5 -rate 3`;
エミッターを(0, 5, 0)の位置に作って斜め下方向(-dx -1 -dy -1 -dz 0)にパーティクルが出てくるようにする。
$name2 = `particle`;
エミッターによって実際に発生させられるパーティクルを作る。
$name3 = `nurbsPlane`;
パーティクルと衝突(collision)する平面(nurbsPlane)を作る。
scale 0 15 15;
nurbsPlaneを縦横15倍にスケールをかける。
rotate 0 0 45;
nurbsPlaneを45度傾かせる。
collision -resilience 0.3 -friction 0.1 $name3[0] $name2[0];
弾力(-resilience 0.3)、摩擦(-friction 0.1)の値で collisionを作る。
このcollisionは上のパーティクル($name2[0])と nurbsPlane($name3[0])に影響する。
$name1 = `gravity -pos 0 0 0`;
パーティクルをアニメーションさせるためにgravityフィールドを作る。
connectDynamic -fields $name1[0] $name2[0];
gravityフィールドとパーティクル($name2[0])をコネクトしてパーティクルが引力によって落ちてゆくようにする。
connectDynamic -collisions $name3[0] $name2[0];
nurbsPlane($name3[0])とパーティクル($name2[0])をコネクトしてパーティクルがnurbsPlaneに衝突すると跳ね返るようにする。