コリジョン

コリジョンとは

コリジョン(collision)によってパーティクルとオブジェクト(ポリゴン、NURBS)との衝突をシュミレーションしてアニメーションを実行できる。
collisionコマンドで作られたコリジョンオブジェクトはconnectDynamic -collisionsによってパーティクルなどにコネクトする。

collisionのオプション

-resilience float
弾力を表す値(0.0 〜 1.0)
大きい値ほど良くはずむ。
-friction float
摩擦を表す値(0.0 〜 1.0)
この値によって跳ねる角度が変る。

collisionコマンドの使用例

エミッターから発生したパーティクルが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];
}
  1. $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)にパーティクルが出てくるようにする。
  2. $name2 = `particle`; エミッターによって実際に発生させられるパーティクルを作る。
  3. $name3 = `nurbsPlane`; パーティクルと衝突(collision)する平面(nurbsPlane)を作る。
  4. scale 0 15 15; nurbsPlaneを縦横15倍にスケールをかける。
  5. rotate 0 0 45; nurbsPlaneを45度傾かせる。
  6. collision -resilience 0.3 -friction 0.1 $name3[0] $name2[0]; 弾力(-resilience 0.3)、摩擦(-friction 0.1)の値で collisionを作る。 このcollisionは上のパーティクル($name2[0])と nurbsPlane($name3[0])に影響する。
  7. $name1 = `gravity -pos 0 0 0`; パーティクルをアニメーションさせるためにgravityフィールドを作る。
  8. connectDynamic -fields $name1[0] $name2[0]; gravityフィールドとパーティクル($name2[0])をコネクトしてパーティクルが引力によって落ちてゆくようにする。
  9. connectDynamic -collisions $name3[0] $name2[0]; nurbsPlane($name3[0])とパーティクル($name2[0])をコネクトしてパーティクルがnurbsPlaneに衝突すると跳ね返るようにする。

練習

参考


Prev | Next
Home | Contents
abe@injapan.net