リジッドボディ

リジッドボディとは

リジッドボディ(Rigid Body)とは NURBS やポリゴンのサーフェスを固い形状にしたものです。
リジッドボディ同士を衝突させて、 貫通しないで跳ね返らせるようにすることができます。

リジッドボディにはアクティブとパッシブという 2 種類があります。
例えば、壁にぶつかるボールを作りたい時は ダイナミクスによってアニメーションするボールをアクティブリジッドボディに、 そのボールが衝突する壁をパッシブリジッドボディにしておきます。

リジッドボディを作成する時に注意しなければならないのは、 衝突する物体同志の法線の向きが反対になっていないと衝突しないということです。

リジッドボディを作るには rigidBody コマンドを使用します。

rigidBody コマンドのフラグ

-active
アクティブリジッドボディを作ります。
衝突(collision)やフィールドなどのダイナミクスを有効にすることができきます。(デフォールト)
キーフレームの設定はできません。
-passive
パッシブリジッドボディを作ります。
パッシブリジッドボディはダイナミクスに反応しません。
キーフレームの設定が可能です。
-initialVelocity float float float
初期の速度(デフォールトは 0.0, 0.0, 0.0)
-bounciness float
弾性の係数(0.0 〜 2.0, デフォールトは 0.6)
-staticFriction float
抵抗力(摩擦)の係数(0.0 〜 1.0, デフォールトは 0.2)
他のリジッドボディに接触している場合に、 2 つのリジッドボディの間にどれだけの摩擦のような抵抗があるかを表します。

rigidBody コマンドの使用例

平面に球が当たってバウンドするアニメーションです。

  1. 以下の MEL スクリプトを makeRigid1.mel という名前で作ります。
    global proc makeRigid1()
    {
           string $sname[] = `sphere`;
           string $pname[] = `nurbsPlane`;
           scale 10 30 20 ;
           rotate 0 0 115;
           move -r 3 -8 0;
    
           string $rname = `rigidBody -active -initialVelocity 10.0 0.0 0.0 -bounciness 0.5 -staticFriction 0.4 $sname[0]`;
           rigidBody -passive $pname[0];
           string $gname[] = `gravity -pos 0 0 0`;
           connectDynamic -fields $gname[0] $rname;
           collision -resilience 0.9 -friction 0.1 $sname[0] $pname[0];
           connectDynamic -collisions $sname[0] $pname[0];
    }
    
  2. Script EditorFile → Source Script によって makeRigid1.mel を読み込みます。
  3. Script Editor の下のウインドウから makeRigid1(); と打ち込んで実行します。
    [makeRigid1.mel の実行図]
  4. プレイバックしてアニメーションを実行します。
    [makeRigid1.mel のアニメーション実行図]

スクリプトの解説

global proc makeRigid1()
makeRigid1() というプロシージャーの宣言です。
string $sname[] = `sphere`;
NURBS の球を作ります。
$sname[0] にトランスフォームノード、 $sname[1] にインプットノードの名前が代入されます。
string $pname[] = `nurbsPlane`;
NURBS の平面を作ります。
$pname[0] にトランスフォームノード、 $pname[1] にインプットノードの名前が代入されます。
scale 10 30 20 ;
NURBS の平面を適当にスケールしておきます。
rotate 0 0 115;
NURBS の平面を適当に回転しておきます。
このとき法線の向きが上に向くようにしないと、 球が素通りしてしまうので注意してください。
move -r 3 -8 0;
NURBS の平面を適当に移動します。
-r フラグがついているので現在位置からの移動になります。
string $rname = `rigidBody -active -initialVelocity 10.0 0.0 0.0 -bounciness 0.5 -staticFriction 0.4 $sname[0]`;
$sname[0] からアクティブリジッドボディを作ります。
各フラグの意味は以下の通りです。
-active
アクティブリジッドボディを作ります。
-initialVelocity 10.0 0.0 0.0
最初のスピードが 10.0 (X方向) 0.0 (Y方向) 0.0 (Z方向)
-bounciness 0.5
弾性の係数は 0.5
-staticFriction 0.4
摩擦係数は 0.4
$sname[0]
リジッドボディにするオブジェクトの名前の入った変数
ここでは NURBS の球です。
rigidBody -passive $pname[0];
nurbsPlane $pname[0] からパッシブリジッドボディを作る。
ここでは NURBS の平面です。
string $grname = `gravity -pos 0 0 0`;
球を下方向に落ちるアニメーションさせるための gravity フィールドを作ります。
-pos 0 0 0
gravityフィールドの位置
connectDynamic -fields $grname[0] $rname;
球から作られたリジッドボディ $rname とgravityフィールド $grname[0] をコネクトします。
collision -resilience 0.9 -friction 0.1 $sname[0] $pname[0];
NURBS の球 $sname[0] と NURBS の平面 $pname[0] が衝突して跳ね返るようにするために collision の設定をします。
connectDynamic -collisions $sname[0] $pname[0];
NURBS の球 $sname[0] と NURBS の平面 $pname[0] をコネクトして衝突すると跳ね返るようにします。

練習

練習課題

参考


Prev | Next
Home | Contents
Mail