コリジョン

コリジョンとは

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 に変えて表示しています。

スクリプトの解説

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`;
パーティクルと衝突する平面 nurbsPlane を作ります。
scale 0 15 15;
nurbsPlane のスケール値を 15 にします。
rotate 0 0 45;
nurbsPlane を Z 軸で 45 度傾かせます。
collision -resilience 0.3 -friction 0.1 $plname[0] $pname[0];
nurbsPlane $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 フィールドによって落ちてゆくようにします。
connectDynamic -collisions $plname[0] $pname[0];
nurbsPlane $plname[0] とパーティクル $pname[0] をコネクトしてパーティクルが nurbsPlane に衝突すると跳ね返るようにします。

練習

練習課題

参考


Prev | Next
Home | Contents
Mail