リジッドボディ

リジッドボディとは

リジッドボディ(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 のアニメーション実行図]

スクリプトの解説

string $sname[] = `sphere`;
球(NURBS Sphere)を作る。
string $pname[] = `nurbsPlane`;
平面(NURBS Plane)を作る。
scale 10 30 20 ;
NURBS Planeを適当にスケールしておく。
rotate 0 0 115;
nurbsPlaneを適当に回転しておく。
このとき法線の向きが上に向くようにしないと、球が素通りしてしまう。
move -r 3 -8 0;
NURBS Planeを適当に移動する。
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]
リジッドボディにするオブジェクトの名前の入った変数
rigidBody -passive $pname[0];
nurbsPlane($pname[0])からパッシブリジッドボディを作る。
string $grname = `gravity -pos 10 10 10`;
球をアニメーションさせる(下方向に落ちる)ためのgravityフィールドを作る。
-pos 10 10 10
gravityフィールドの位置
connectDynamic -fields $grname[0] $rname;
球から作られたリジッドボディ($rname)とgravityフィールド($grname[0])をコネクトする。
collision -resilience 0.9 -friction 0.1 $sname[0] $pname[0];
球($sname[0])とnurbsPlane($pname[0])が衝突して跳ね返るようにするために collision の設定をする。
connectDynamic -collisions $sname[0] $pname[0];
球($sname[0])とnurbsPlane($pname[0])をコネクトして衝突すると跳ね返るようにする。

練習

練習課題

参考


Prev | Next
Home | Contents
Mail