立方体と、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 にして、下に障害物を置いてみました。全体としてある程度動く物体として落ちていきます。 |
オブジェクトを2つ配置しました。 どちらも剛体設定をして、柱は Passive にしておきます。 扉っぽくするためにオブジェクトを片方薄くしました。 Hinge の回転運動は、オブジェクトの原点どうしの関係によって制御されるので、 扉の開閉のように動くようにどちらのオブジェクトも全体をずらして、蝶番のそばに原点が来るようにしています。 (ただし、ぶつかって動けなくならないように、少し隙間をあけています) | |
柱の側に Constraint を設定します。 2つの物体の関係として、タイプを Hinge (ヒンジ = 蝶番(ちょうつがい)) にします。 | |
物体をぶつけてみると蝶番のように動きました。 | |
今までの動画例に比べて、やけに動きが軽いなと気が付いたかもしれません。 シーンの Rigid Body World の設定の Speed によって、剛体シミュレーション全体の速度を速くしたり遅くしたりできます。 正しいスケール感でオブジェクトを配置していれば正しい時間スケールのシミュレーションになるはずですが、 スケール感を間違えてシーンを作ったような時に重宝します。 | |
束縛条件は、Constraint を設定したオブジェクトのローカルな座標系で計算しています。 なので、全体を回転させて Z 軸(青)を横向きにしてみると | |
この様な動きもできます。 (Constraint を Dynamic な剛体に対して設定すると、ローカルな座標系で扱ってくれないようです) |