こんにちは。コンテンツデザイン開発グループ リアルタイムチームの戸本です。今回は、今まで制作した防災案件や社内のデモコンテンツで実際に使用した、Physics Constraintの活用例をご紹介します。
Physics Constraintとは?
Unreal Engineで2つの「物理オブジェクト」を接続し、関節(ジョイント)の役割を果たす仕組みがPhysics Constraintです。
例えば、ドアのオブジェクトを特定の支点に固定して開閉させたり、天井から吊り下げたペンダントライトを揺らしたりする表現が可能です。
キャドセンターが取り組んでいる防災関連のコンテンツでは、地震による揺れをシミュレーションする際、このPhysics Constraintがとても有用です。

ドアを揺れに合わせて開閉させる
Physics Constraintは、特別なプラグインを必要とせず、プロジェクトでそのまま使用することができます。
ここでは、実際にドアの動きを表現する手順を説明します。
まず、ドア枠とドアのオブジェクトを用意します。
その際、念の為あらかじめオブジェクトの基点(ピボット)を開閉の支点となる位置に設定しておきます(この基点は、後からUnreal Engine上で変更することも可能です)。
オブジェクトをUnreal Engineに読み込んだ後、ドアの支点となる位置にPhysics Constraintを配置します。

動作にはコリジョン(当たり判定)と物理が必要
次に、ドアにコリジョン(当たり判定)を設定します。
FBX形式でインポートした場合は自動で設定されますが、今回はシンプルな形状のコリジョンを改めて設定し直しておきます。
設定後、詳細パネルから「Simulate Physics(物理シミュレーション)」にチェックを入れます。
この手順は忘れやすいため注意してください。
ここが正しく設定されていないと、最悪の場合、Unreal Engineがフリーズして強制終了してしまう原因になります。

Physics Constraintでつないで揺れを調整する
Physics Constraintを配置し、詳細の設定で「ドア枠」と「ドア」をそれぞれ指定します。
設定後、このままでもドアは枠の位置に固定されて動くようになりますが、初期状態ではあらゆる方向に自由に動いてしまうため、回転方向に制限をかけます。
制限をかけることで、ドアらしい挙動になりますが、一般的なドアは片側にしか開閉しません。
そのため、さらに詳細な可動範囲の制限(角度の制限)を設定していきます。

Angular Limitsを以下のように設定します。
Swing1 Limitで設定した角度に対して、Rotation Offsetを指定する事で、一方の方向のみに回転させることができます

ドアのオブジェトにも念のため、コンストレイントの回転ロックをかけておきます。




初期状態ではゆらゆらしてしまうドアも制限を設定していくことでドア本来の動きを取り戻す
戸棚のドアを揺れに合わせて開閉させる
次は、少し複雑な形状のオブジェクトを使って設定してみます。
例として、両開きのドア(観音開き)を持つ戸棚にPhysics Constraintを設定します。
基本的な設定手順は先ほどの片開きドアと同様ですが、今回は左右対称となる2つの別々のドアオブジェクトを用意し、それぞれにPhysics Constraintを設定していきます。

コリジョンの細かい調整
演出として戸棚の中に小物のオブジェクトなどを配置したい場合は、コリジョン(当たり判定)を細かく設定する必要があります。
これは、中のオブジェクトとドアのコリジョンが互いに干渉(衝突)してしまうのを防ぐためです。
物理シミュレーションによる挙動はある程度制御できるものの、実行するたびに結果が異なる(ランダム性がある)という特性を持っています。
そのため、戸棚の形状やドアの初期位置を考慮しながら、実際に何度も動かしてみて細かな調整を繰り返す必要があります。

動きを制限してスライドドアを表現する
次に、ドアの動きのバリエーションを増やしてみましょう。
先ほどの「開き戸」に対して、今度は「引き戸」を設定していきます。
引き戸は回転せず、左右にスライドする動きになります。
そのため、Physics Constraintの回転方向の制限(Angular Limits)はすべて固定(Locked)し、移動方向(Linear Limits)にのみ制限をかけてスライドできるように設定します。
さらに、ドアが枠からはみ出してしまうのを防ぐため、動きの妨げとなるコリジョン(またはブロック用のオブジェクト)を配置します。
なお、デフォルトの状態ではスライドの抵抗が緩く、動きすぎてしまうことがあります。
その場合は、抵抗値や感度(Linear Dampeningなど)のパラメータを調整し、イメージ通りの動きになるように設定していきます。


シンプルな設定で揺らす
Physics Constraintは、特定の支点に固定されたオブジェクトが、周囲の動きに合わせて揺れる表現に使われることが多く、これが最も一般的な使い方かもしれません。
設定方法はドアの時と同様で、まずは支点となる位置を決めたオブジェクトを用意します。
例えばペンダントライトのような形状であれば、天井との接合部分にPhysics Constraintを設定すると上手くいきます。
ただし、シーンのアニメーション(揺れや衝撃)の大きさによっては、オブジェクトが際限なく回転し続けてしまうことがあります。そのため、前述した抵抗値(Dampening)の調整や、ツイスト(捻り)の動きに制限を設けることで制御します。


工夫次第で色々表現できる
改めて室内を見回すと、家具や家電、照明など、さまざまなオブジェクトが特定の支点で壁や天井、床に固定されていることがわかります。
地震に対する備え(防災対策)として使われる突っ張り棒や固定器具などは、まさに「特定の支点」を持って部屋の中に配置されていきます。
Physics Constraintを使ってこれら固定器具の役割や動きを再現することで、臨場感と説得力のある防災シミュレーションシーンを製作することができます。

キャドセンターでは、こうした3D表現や物理シミュレーションの技術を活かして、これからも安全や防災に役立つコンテンツ制作を進めてまいります。





