コリジョン

コリジョンとは

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

collisionのフラグ

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

collisionコマンドの使用例

エミッターから発生したパーティクルがnurbsPlaneに衝突して跳ね返りながら落ちてゆくプログラム。

  1. 以下のMELスクリプトを makeCollision1.mel という名前で作る。
    global proc makeCollision1()
    {
    	string $ename[] = `emitter -pos 0.0 5.0 0.0 -type "direction" -dx -1.0 -dy -1.0 -dz 0.0 -spread 0.5 -rate 3`;
    	string $pname[] = `particle`;
    	connectDynamic -emitters $ename[0];
    	
    	string $plname[] = `nurbsPlane`;
    	scale 0 15 15;
    	rotate 0 0 45;
    	
    	collision -resilience 0.3 -friction 0.1 $plname[0] $pname[0];
    	string $gname[] = `gravity`;
    	connectDynamic -fields $gname[0] $pname[0];
    	connectDynamic -collisions $plname[0] $pname[0];
    }
    
  2. Script EditorFile → Source Script によって makeCollision1.mel を読み込む。
  3. Script Editor の下のウインドウから makeCollision1(); と打ち込んで実行する。
  4. プレイバックしてアニメーションを実行する。
    [makeCollision1.mel の実行図]
    上図はわかりやすくするためにパーティクルの Particle Render Type アトリビュートを Spheres に変えて表示している。

スクリプトの解説

string $ename[] = `emitter -pos 0.0 5.0 0.0 -type "direction" -dx -1.0 -dy -1.0 -dz 0.0 -spread 0.5 -rate 3`;
エミッターを(0, 5, 0)の位置に作って斜め下方向(-dx -1 -dy -1 -dz 0)にパーティクルが出てくるようにする。
string $pname[] = `particle`;
エミッターによって実際に発生させられるパーティクルを作る。
connectDynamic -emitters $ename[0];
現在セレクトされているパーティクル($pname)をエミッター($ename)にコネクトする。
string $plname[] = `nurbsPlane`;
パーティクルと衝突する平面(nurbsPlane)を作る。
scale 0 15 15;
nurbsPlaneを縦横15倍にスケールをかける。
rotate 0 0 45;
nurbsPlaneを45度傾かせる。
collision -resilience 0.3 -friction 0.1 $plname[0] $pname[0];
弾力(-resilience 0.3)、摩擦(-friction 0.1)の値で collisionを作る。 このcollisionは上のパーティクル($pname[0])と nurbsPlane($plname[0])に影響する。
string $gname[] = `gravity`;
パーティクルをアニメーションさせるためにgravityフィールドを作る。
connectDynamic -fields $gname[0] $pname[0];
gravityフィールドとパーティクル($pname[0])をコネクトしてパーティクルが引力によって落ちてゆくようにする。
connectDynamic -collisions $plname[0] $pname[0];
nurbsPlane($plname[0])とパーティクル($pname[0])をコネクトしてパーティクルがnurbsPlaneに衝突すると跳ね返るようにする。

練習

練習課題

参考


Prev | Next
Home | Contents
Mail