リジッドボディ

リジッドボディとは

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

rigidBodyのオプション

-active
このフラグを設定しておくと衝突(collision)やフィールドを有効にすることができる。(デフォールト)
-initialVelocity float float float
初期の速度(デフォールトは0, 0, 0)
-bounciness float
弾性の係数(0.0 〜 2.0, デフォールトは0.6)
-staticFriction float
抵抗力(摩擦)の係数(0.0 〜 1.0, デフォールトは0.2)
他のリジッドボディに接触している場合に、2つのリジッドボディの間にどれだけの抵抗(摩擦のようなもの)があるかを表す。

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];
}
  1. $name1 = `sphere`; 球(spher)を作る。
  2. $name2 = `nurbsPlane`; 平面(nurbsPlane)を作る。
  3. rotate 0 0 180; nurbsPlaneを180度回転して反対を向くようにしておく。 こうしておかないと球がぶつかった時に法線の向きが逆なので、球が素通りしてしまう。
  4. scale 0 10 10 ; nurbsPlaneをY-Z方向に10倍する。
  5. move -r 10 -5 0; nurbsPlaneを(10, -5, 0)だけ移動する。
  6. $name3 = `rigidBody -active -initialVelocity 10 0 0 -bounciness 0.5 -staticFriction 0.4 $name1[0]`; 球($name1[0])からリジッドボディを作る。
  7. $name4 = `rigidBody -passive $name2[0]`; nurbsPlane($name2[0])からリジッドボディを作る。
  8. $name5 = `gravity -pos 10 10 10`; 球をアニメーションさせるためのgravityフィールドを作る。
  9. connectDynamic -fields $name5[0] $name3; 球から作られたリジッドボディ($name3)とgravityフィールド($name5[0])をコネクトする。
  10. collision -resilience 0.3 -friction 0.1 $name1[0] $name2[0]; 球($name1[0])とnurbsPlane($name2[0])からcollisionを作る。
  11. connectDynamic -collisions $name1[0] $name2[0]; 球($name1[0])とnurbsPlane($name2[0])をコネクトして衝突すると跳ね返るようにする。

練習

参考


Prev
Home | Contents
abe@injapan.net