コリジョン

コリジョンとは

パーティクルと、ポリゴンや NURBS などのオブジェクトを衝突させることができます。
そのためには、collision コマンドを使用します。

collision コマンドのフラグ

-resilience float
弾性を表す値(0.0 〜 1.0)
大きい値ほど良くはずむようになります。
デフォールトは 1.0 です。
-friction float
摩擦を表す値(0.0 〜 1.0)
この値によって跳ね返る角度が変ります。
デフォールトは 0.0 です。

collision コマンドの使用例

以下のスクリプトによって、 エミッターから発生したパーティクルが NURBS プレーン に衝突して跳ね返りながら落ちてゆくアニメーションが作成されます。

  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];
    }
    
  2. スクリプト エディタファイル → ソース スクリプト によって makeCollision1.mel を読み込みます。
  3. スクリプト エディタ の下のウインドウから makeCollision1(); と打ち込んで実行します。
  4. プレイバックしてアニメーションを実行します。
    [makeCollision1.mel の実行図]
    上図はわかりやすくするためにパーティクルの レンダータイプ アトリビュートを 球体 に変えて表示しています。

スクリプトの解説

global proc makeCollision1()
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`;
エミッターを作成します。
各フラグの意味は、以下の通りです。
-pos 0.0 5.0 0.0
エミッターが作られる位置です。
-type "direction"
-dx, -dy, -dz フラグで指定する方向にパーティクルを放出します。
-dx -1.0 -dy -1.0 -dz 0.0
パーティクルの放出方向です。
-spread 0.5
パーティクルの放出角度を指定します。
0.0 から 1.0 の値を指定して、 0.5 が 90 度、1.0 が 180 度になります。
このフラグは -type が direction か curve の場合のみ有効です。
-rate 3
毎秒のパーティクルの放出数を指定します。
string $pname[] = `particle`;
エミッターによってパーティクルが追加されてゆく、パーティクルオブジェクトを作ります。
connectDynamic -emitters $ename[0];
現在セレクトされているパーティクル $pname をエミッター $ename にコネクトします。
string $plname[] = `nurbsPlane`;
パーティクルと衝突する NURBS プレーン を作ります。
scale 0 15 15;
NURBS プレーン のスケール値を 15 にします。
rotate 0 0 45;
NURBS プレーン を Z 軸で 45 度傾かせます。
collision -resilience 0.3 -friction 0.1 $plname[0] $pname[0];
NURBS プレーン $plname[0] とパーティクル $pname[0] にコリジョンの設定をします。
各フラグの意味は、以下の通りです。
-resilience 0.3
弾性係数
この値が 0.0 以上だと衝突したパーティクルが跳ね返ります。 0.0 以下だと貫通します。
1.0 以上、または -1.0 以下だと衝突後のパーティクルの速度が加速されます。
-friction 0.1
摩擦係数
この値が 0.0 であれば摩擦の影響を受けないで、 衝突した面に平行に跳ね返ります。 値が 1.0 の場合は衝突した面に垂直に跳ね返ります。
string $gname[] = `gravity`;
パーティクルに、下方向へ落ちてゆくアニメーションをさせるために gravity フィールドを作ります。
connectDynamic -fields $gname[0] $pname[0];
gravity フィールドとパーティクル $pname[0] をコネクトして、 パーティクルが gravity フィールドによって落ちてゆくようにします。

弾性と摩擦を変更

たとえば、コリジョンの設定を行った後で、 弾性係数を 0.8、摩擦係数を 0.3 に変更するには以下のどちらかの方法で実行します。

練習

練習課題

参考


Prev | Next
Home | Contents
Mail