「UE4.18で生まれ変わった物理アセットエディタ(Physics Asset Editor)について」 と 「物理と少し仲良くなる方法について」 その2
qiita.com
本記事はUnreal Engine 4 (UE4) Advent Calendar 2017の13日目の記事です。
長くなっちゃったので、3つ記事分割しました!
その1:http://pafuhana1213.hatenablog.com/entry/2017/12/13/000000
その2:ここ
その3:http://pafuhana1213.hatenablog.com/entry/2017/12/13/003018
追記:
2018年も物理と仲良くなる方法について書きました!
pafuhana1213.hatenablog.com
この記事ではグレイちゃんのツインテールに物理をつける作業を通して、どういう流れで物理アセットを作っていくかについて説明します。
4.18で大幅に変わった物理アセットエディタと少し仲良くなってから1時間程格闘した結果…そこそこ物理で動いて、そこそこ元の髪型を維持しつつ、そこそこ謎重力が働いてふわふわ浮いてる髪の毛の挙動ができた。モーションを急に変えても荒ぶらないしいい感じ #UE4 #UE4Study pic.twitter.com/ni3PEDjJ9L
— おかず じゅうななさい (@pafuhana1213) 2017年12月11日
作業に取りかかる前に
早速色々パラメータ調整をしていきたい所ですが、まず少し落ち着きましょう!
物理アセットの初期状態は↑のようにBodyがびっしりと配置されています。これはこれで便利な時もあるのですが、今回のように特定の部位だけに物理を適用したい場合は作業の邪魔になります。さらに、不要なBodyは処理負荷の観点からもオススメできません…
なので、不要なBodyは消すか、全Bodyを消して必要なBodyを新たに作成しましょう!今回はBodyの追加方法を説明したいので後者の手順でいきます。全消しは簡単で、Skeleton Treeの項目を全選択してdeleteするだけです。
Bodyの追加
今回はツインテを揺らしたいので、頭とツインテにBodyを付けます。
この右クリックメニューから追加できるBodyですが、エディタ右下にあるToolsのBody Creationの部分で形状・条件を設定する事が可能です。
Bodyの物理ONOFF
次に、どのBodyを物理で揺らすのかを設定します。Bodyは全て物理で揺れるものという訳ではなく、物理では動かないコリジョンのためのBodyも用意する必要があります。
ON・OFFの設定は詳細パネル 又は 右クリックメニューの Physics Typeで設定します。
- Default : 親(Skeletal Mesh Component)のSimulate Phyiscs設定に従う
- Kinematic:物理OFF
- Simulated:物理ON
今回は頭はKinematic、ツインテはSimulatedに設定します。
ちなみに、Kinematic設定になっているBodyはアイコンが変わります。
超分かりやすい!!!
ここまでの結果がこんな感じです
暴れん坊将軍なので、次はConstraintの設定をしていきます。
Constraintによる回転制限
Constraintを使うことで、物理によるBodyの回転を制限する事が可能です。デフォルトでは以下のようにXYZ軸全てにおいて制限無しになっています。そりゃ荒ぶる…
ちなみにConstraintの回転制限の表示に関しては、Showのここから切り替え可能です。
今回は前後に揺れるような髪の動きにしたいので、前後の1軸でのみ動作するように制限を掛けます。回転の制限はConstraintの詳細パネルにある「Angular Limits」から設定可能です。
完全に制限する場合は Locked、一定の角度に制限する場合はLimitedに設定します。
さらに、その下にあるSoft ConstraintをOFFにします。この設定はバネのような表現をするためにConstraintを緩和するものなのですが…「個人的な印象ですが」 有効だと荒ぶることが多いです。なので、今回はOFFにしておきます。
で、設定した結果がこれ
一気にいい感じになりましたが、ツインテの根本部分がプルプル震え続けています。次はこれを抑えます。
Primitive同士の重なり・衝突を削減
上の画像はツインテの根本の部分で、複数のBodyが持つPrimitiveが重なり合っているのが確認できます。これは非常に悪い状態で、物理が始まるとお互いを弾き合います。すると、物理開始直後に荒ぶったり常にプルプルするという好ましくない挙動になりがちです。また、Primitive同士の衝突頻度が高い状態もあまり好ましくありません。
その為、各Primitiveの大きさを調整する必要があります。調整の手法は2パターンあって、まずはPrimitiveをいつものGizmoを使って調整する手法があります。
次に、Bodyの詳細パネルから直接数値を入力して調整する手法です。
少し余談なのですが、↑の画像にある Consider for Boundsには是非注意して下さい。この設定が有効になっている場合、そのBodyが持つPrimitiveは Skeletal Meshのバウンディングボックスの計算に使われます。デフォルトは有効になる為、Skeletal Meshがアニメーションによってシルエットが変化しても、その形状に応じたバウンディングボックスが作成されます。しかし、もし何らかの物理挙動を実現するために超特大のPrimitiveを作成した際に問題になります。Skeletal Meshの見た目よりも遥かに大きなバウンディングボックスが作成されるため、カリング計算など様々な面で支障が生じる可能性があります。そんな時に役立つのが、このConsider for Boundsフラグです。もしSkeletal Meshのバウンディングボックスが物理アセットが原因でおかしくなっている場合はこの設定を調整してみて下さい。
で、結果がこちら
このgifだと分かり辛いとは思いますが…かなり安定しました!
これで終わり!
物理アセットの調整終了!!!
と言いたい所ですが…フレームレートが低下したり、急激な動きが発生すると荒ぶることがあります…
次の記事はその荒ぶりを可能な限り回避するためのTipsを紹介していきます。