リジッドボディ(Rigid Body)とはNURBSやポリゴンのサーフェスを固い形状にしたものである。
リジッドボディ同士を衝突させても貫通しないで跳ね返らせるようにすることができる。
リジッドボディを作るにはrigidBodyコマンドを使用する。
平面に球が当たってバウンドするアニメーション。
rigidBodyなのでsoftBodyのように変形しないで跳ね返る。
以下のスクリプトをmakeRigid1.melという名前で作り、makeRigid1();によって実行させてみよう。
global proc makeRigid1()
{
$name1 = `sphere`;
$name2 = `nurbsPlane`;
rotate 0 0 180;
scale 10 10 10 ;
move -r 10 -5 0;
$name3 = `rigidBody -active -initialVelocity 10 0 0 -bounciness 0.5 -staticFriction 0.4 $name1[0]`;
$name4 = `rigidBody -passive $name2[0]`;
$name5 = `gravity -pos 10 10 10`;
connectDynamic -fields $name5[0] $name3;
collision -resilience 0.3 -friction 0.1 $name1[0] $name2[0];
connectDynamic -collisions $name1[0] $name2[0];
}
$name1 = `sphere`;
球(spher)を作る。
$name2 = `nurbsPlane`;
平面(nurbsPlane)を作る。
rotate 0 0 180;
nurbsPlaneを180度回転して反対を向くようにしておく。
こうしておかないと球がぶつかった時に法線の向きが逆なので、球が素通りしてしまう。
scale 0 10 10 ;
nurbsPlaneをY-Z方向に10倍する。
move -r 10 -5 0;
nurbsPlaneを(10, -5, 0)だけ移動する。
$name3 = `rigidBody -active -initialVelocity 10 0 0 -bounciness 0.5 -staticFriction 0.4 $name1[0]`;
球($name1[0])からリジッドボディを作る。
$name4 = `rigidBody -passive $name2[0]`;
nurbsPlane($name2[0])からリジッドボディを作る。
$name5 = `gravity -pos 10 10 10`;
球をアニメーションさせるためのgravityフィールドを作る。
connectDynamic -fields $name5[0] $name3;
球から作られたリジッドボディ($name3)とgravityフィールド($name5[0])をコネクトする。
collision -resilience 0.3 -friction 0.1 $name1[0] $name2[0];
球($name1[0])とnurbsPlane($name2[0])からcollisionを作る。
connectDynamic -collisions $name1[0] $name2[0];
球($name1[0])とnurbsPlane($name2[0])をコネクトして衝突すると跳ね返るようにする。