-Blenderで剛体シミュレーションをするときの手順と注意点-


3. Rigid Body Constraint(束縛条件)

複数の剛体を動かすときに、それらを連結したりといった操作を Rigid Body Constraint (リジッドボディコンストレイント = 束縛条件)で行うことができます。

Rigid Body Constraint の設定は、2つのオブジェクトの間で効果を持ちますが、
その2つのオブジェクトとは別に、関節の位置に用意した Empty に対して設定するのが安全な方法です。

■ Generic Spring (汎用ばね)

立方体をコピー(Shift-D 又は Alt-D)して並べて、それらが関節状に動作するようにしてみます。

立方体と、Constraint を設定するための Empty を用意します。

Cube を x 軸方向に複製して並べてみます。
その間になる位置に Empty を複製して並べます。
Cube, Empty, Cube.001, Empty.001, Cube.002 .... というように名前が付くと思います。
左端の Cube を親と考えて、順番に右側のオブジェクトに影響するようにします。
まずは全部の Cube に、剛体設定をしておきます。
Empty に Rigid Body Constraint を設定します。
まず Objects 設定で、どの物体どうしの関係なのかを First と Second で設定します。
まずは、Cube と Cube.001 を設定します。
Typeはいくつかあるのですが、Generic Spring (汎用バネ)にしてみました。
Disable Collisions(コリジョンを無効) が On になっているので、衝突をきちんと計算する場合はOff にしておきます。
Limit(リミット) の Angular(角度)設定で、何度までねじりが許容されるか設定します。
X Angle, Y Angle, Z Angle を有功にして、それぞれ -45度 から +45 まで動けるように設定しておきます。
Linear (リニア)の設定で、今度は相対位置の変化がどの程度まで許容されるかを設定します。
これも各軸について ±0.2まで許容されるように設定しました。
さらに、Springs(ばね)の設定をします。
ばねが有効になることで、動きが少し柔らかくなるはずです。
バネのパラメータは初期値のままにしました。

同様にして、Empty.001 には Cube.001 と Cube.002 の関係を設定します。
同じように Empty.002 も設定をします。
親の Cube は Dynamic ではなくして重力の影響を受けないようにしました。
残りの3つのキューブは束縛条件の範囲内のみで運動しています。

エンプティとCubeの位置関係が変化するので一見不思議な感じがしますが、最初のフレームの位置関係情報を保持して利用しているので、Cube と Empty の位置関係が変わっても問題ないようです。
(視覚的に邪魔な場合は隠してしまいましょう)
今度は親も Dynamic にして、下に障害物を置いてみました。全体としてある程度動く物体として落ちていきます。

Empty の用意を省略して、どちらかのオブジェクトに対して Rigid Body Constraint を設定することも可能なようです。
しかし、動く剛体オブジェクト(Active)にConstraintをセットすると誤動作の元になり、
動かない剛体オブジェクト(Passive)の上にセットをする場合限定の方法のようです。

(つまり、柱などの動かないパーツとそれにくっついた可動部、というような場合だけ、Emptyの配置を省略して設定ができます)

■ Hinge (ヒンジ = 蝶番(ちょうつがい))

折角なので、他のタイプの例として Hinge を試してみます。
扉のような構造を作り、親になる物体として動かない壁(柱)を置き、扉と柱の関係を設定します。
柱は Passive な剛体なので、Empty を使わずに、柱に直接 Constraint を設定することができます。
(もちろん上の例のように Empty を使って設定しても O.K. です)

オブジェクトを2つ配置しました。
どちらも剛体設定をして、柱は Passive にしておきます。

扉っぽくするためにオブジェクトを片方薄くしました。
Hinge の回転運動は、オブジェクトの原点どうしの関係によって制御されるので、
扉の開閉のように動くようにどちらのオブジェクトも全体をずらして、蝶番のそばに原点が来るようにしています。
(ただし、ぶつかって動けなくならないように、少し隙間をあけています)
柱の側に Constraint を設定します。
2つの物体の関係として、タイプを Hinge (ヒンジ = 蝶番(ちょうつがい)) にします。

物体をぶつけてみると蝶番のように動きました。
今までの動画例に比べて、やけに動きが軽いなと気が付いたかもしれません。
シーンの Rigid Body World の設定の Speed によって、剛体シミュレーション全体の速度を速くしたり遅くしたりできます。

正しいスケール感でオブジェクトを配置していれば正しい時間スケールのシミュレーションになるはずですが、
スケール感を間違えてシーンを作ったような時に重宝します。
束縛条件は、Constraint を設定したオブジェクトのローカルな座標系で計算しています。
なので、全体を回転させて Z 軸(青)を横向きにしてみると
この様な動きもできます。

(Constraint を Dynamic な剛体に対して設定すると、ローカルな座標系で扱ってくれないようです)

inserted by FC2 system