このチュートリアルでは、Rigid Bodies と Hinge Constraint を設定して、Newton's pendulum のアニメーションを作成する方法を見ていきます。
動画の書き起こし
このチュートリアルでは、Rigid Bodies と Hinge Constraint を設定して、Newton's pendulum のアニメーションを作成する方法を見ていきます。このチュートリアルは Blender version 3.6 を使用して作成されています。
まず最初に、基本構造と多数の sphere およびそれぞれの support を備えた、あらかじめ用意された 3D model を使用します。
この 3D model では、sphere と support の origin は回転軸となる位置に正しく設定されていますが、すべて structure に parent されています。
これは不要であり、実際には physics simulation に問題を引き起こす可能性があります。
そのため、最初のステップとして、それらをすべて選択し、ショートカット ALT P を使用して parent を解除します。次に、画面に表示される Separate menu から "Clear Parent and Keep Transformation" を選択します。
実際には、すべての sphere に対して繰り返し行う操作が必要なので、1つを除いてすべて削除してしまって構いません。こうすることで、残った sphere に対して操作を行い、あらかじめ設定済みの copy を作成できます。

これで、base と最初の sphere およびその support の2つの object が存在する状態になります。
base は physics simulation に含まれないため、無視して構いません。
sphere の origin は、回転軸上の上部に配置されています。
これは非常に便利です。なぜなら、その位置、つまり sphere の垂直軸上に、Hinge Constraint を使用するために必要な accessory object を追加する必要があるからです。

scene に新しい object を追加すると、その object は 3D Cursor の位置に origin を持った状態で配置されます。そのため、まず SHIFT S を使用し、"Cursor to Selected" を選択して、3D Cursor を sphere の origin に配置します。
次に、Hinge Constraint を適用するための accessory object が必要です。どの object でも構わないので、ここでは simple cube を追加し、見やすいように resize します。
resize 後、CTRL A を使用して scale transformation を適用します。この操作は今回の状況では不要かもしれませんが、良い習慣として身につけておく価値があります。

cube を選択した状態で、Properties Window の Physics tab を開き、Rigid Body component を追加します。Type は Passive に設定します。

この object は Rigid Body simulation に参加しますが、force に反応しません。先ほど述べたように、この object は sphere の回転を制限する constraint として機能します。
次に、sphere にも Rigid Body を追加します。ただし、sphere は gravity やその他の force に従って動く必要があるため、Type を Active に変更します。object の default mass value は小さすぎるため、100 grams に設定します。

さらに重要な変更として、sphere の Collision Shape を修正する必要があります。この parameter は初期状態では Convex Hull に設定されていますが、生成される hull が他の object との interaction 時に問題を引き起こす場合があります。
そのため、mode を Mesh に変更します。この option は計算負荷が高くなりますが、より正確な結果を得ることができます。

Margin parameter の tooltip では、0 より大きい値を設定することが推奨されています。しかし、試行の結果、このケースでは 0 に設定した方が良いことが分かりました。これにより、simulation 開始時に object 同士が非常に近い位置にあっても、stationary な状態で collision が検出されるのを防ぐことができます。


また、Bounciness parameter には 0.9 のような非常に高い値を設定する必要があります。これにより、sphere が大きく bounce し、ほぼ完全弾性衝突になります。
Dynamics section には、時間経過による velocity や angular momentum の減衰を管理する Damping 関連の parameter もあります。これらの parameter は、後で全 sphere を使った test を行う際に再度確認します。
続行する前に、scene を新しい file として保存しておきましょう。
このチュートリアルでは、Play を押したり Bake を開始したりする前に project を保存することを推奨します。今回の simulation では、変更を保存せずに Play を押した際に Blender が何度か crash しました。
この時点で animation を開始すると、sphere は空間に落下します。
これは実際には正しい挙動です。なぜなら、先ほど追加した cube に sphere を拘束する Hinge Constraint をまだ作成していないからです。
ただし、その前にもう1つ修正が必要です。sphere の center of mass を geometry の内部に移動する必要があります。これは Edit Mode で SHIFT S を使用して 3D Cursor を sphere の center に配置し、その後 Object Mode で右クリックして "Origin to 3D Cursor" を選択することで行えます。

これで sphere と cube は垂直方向に完全に alignment された状態になります。
rendering 前には cube を非表示にできますが、今の段階では visible のままにしておくと便利です。cube を選択し、Hinge Constraint の作成に進みましょう。
Rigid Body Constraint は、Rigid Body component と同様に、Properties editor の Physics tab から追加します。
最初に行うべきことは、Constraint Type を Fixed から Hinge に変更することです。

Objects section には、scene 内の2つの object を指定する field があります。Constraint は、Second として指定された object を、stationary なままの First object に接続する形で動作します。
この場合、Cube を First、sphere を Second に設定できます。

ただし、まだ終わりではありません。Hinge Constraint では、Passive Rigid Body object の local Z-axis を中心に回転が発生します。
基本的に、Hinge は Point Constraint に似ていますが、swing をこの axis に制限します。この project では、scene の global X-axis を中心に回転させる必要があります。そして現在、それは cube の local X-axis に対応しています。そのため、cube を Y-axis 周りに 90 degrees 回転させる必要があります。local axis を表示するために、3D view の Transform Orientation を Local に変更しています。

それでは、R Y 90 を押して rotation を実行しましょう。
project を保存して simulation を開始すると……何も起こりません!
sphere の center of mass は内部に正しく設定されていますが、sphere と constraint が完全に垂直に alignment されており、balanced な状態だからです。
そのため、sphere に初期 rotation を与える必要があります。その後の動きは physics が処理してくれます。
sphere の Origin が内部に移動したので、cube がある位置を中心に sphere と support を回転できると便利です。
そのため、scene に Empty object を追加し、すぐに ROTATION と rename します。次に、sphere を選択し、その後に ROTATION Empty を選択して multi-selection を行います。最後に CTRL P を押して parent-child relationship を作成し、sphere を ROTATION Empty の child にします。

これにより、controlling Empty を回転させることで、最初の sphere に初期 rotation を与えられます。ここで project を保存し、simulation を開始してください。今度は sphere が期待通りに動作します。

他の sphere を作成する作業は実際には簡単です。最初の sphere と、Rigid Body Constraint を持つ cube を copy して進められるからです。
ROTATION Empty を再び垂直位置に戻し、cube と sphere を multi-selection で選択します。その後、SHIFT D Y と mouse movement を使用して最初の duplicate を作成し、2番目の sphere を最初の sphere のすぐ隣に配置します。

SHIFT D Y を指定したのは、Y-axis に constrained した状態で duplicate の移動を行うためです。つまり、Blender は duplicate と移動を1つの operation として扱います。
これにより、SHIFT R を押すことで、最後の operation を繰り返し、他の copy をすでに正しい位置に配置した状態で作成できます。
copy が正しく配置されていれば、この時点で project を保存して simulation を開始しても、sphere はその場で完全に stationary なままになります。
これは、Rigid Body simulator が object 間の false collision を検出していないことを示しています。
唯一の欠点は、すべての copy が、最初の sphere の初期 orientation を与える ROTATION Empty に parent されていることです。
しかし、この問題は簡単に解決できます。すべての copy を選択し、ALT P を使用して Empty から detach した後、Clear Parent and Keep Transformation を選択します。

最初の sphere を制御する Empty を回転させ、project を保存して simulation を開始し、得られた結果を確認しましょう。
結果に満足できたら、次のステップは Rigid Body Constraint を持つ cube を scene と final rendering の両方から hidden にし、rendering に進むことです。
中央の sphere が動きすぎる場合は、初期 configuration で sphere 同士をもっと近づけて配置してみてください。constraint を持つ cube も sphere と一緒に移動することを忘れないでください。そうしないと、sphere が独自の初期 rotation を持った状態で開始してしまいます。
simulation を高速化したり、sphere をより大きく swing させたりするには、いくつかの parameter を調整できます。選択したすべての sphere に対して一度に parameter を変更するには、ALT key を押しながら変更したい parameter を mouse でクリックします。
sphere に関しては、Bounciness value を上げ、Rigid Body tab の Dynamics section にある linear movement と rotation の両方の Damping value を大幅に下げることを推奨します。

ただし、Friction value を下げることは推奨しません。これにより、本来 stationary であるべき sphere に不要な movement が発生する可能性があります。

Properties editor の Scene tab には、physics simulation 全体を加速できる Speed parameter があります。
同じ tab には、Substeps と Solver Iterations parameter もあります。
physics simulation に error が見られる場合にのみ、これらを増やすことを推奨します。
これらの parameter は Blender に対してより多くの calculation を実行するよう指示するため、simulation はより正確になりますが、その分 simulation time は増加します。
以上です! このチュートリアルを楽しんでいただけたなら嬉しいです! また次回お会いしましょう!