#memo

indiedev太郎

UE4.13で追加されたPhysical Animationsについて

4.13で追加されたPhysical Animations
Unreal Engine 4.13 Released!

従来でも物理アニメーションはPhATを設定して、このボーン以下にどんくらい適応するみたいな事はできた
追加された機能の違いと使い方を確認する

現時点でまだドキュメントはなく、公式による解説動画がある
Physical Animations with Ian and Alex - Training Stream - YouTube

将来的にドキュメントが作成されているはずなので、そちらを参考にしてください
また、まだ実験機能ということで、仕様が変わる可能性があるので記事の日付をよく確認してください

つかいどころさん
・殴られ応答
f:id:miyahuji111:20160918141022g:plain
・振り向き応答
・着地応答
・モーション作成ある程度手ぬいてもそれっぽくなる

無限


PhysicalAnimationの適用準備と設定
PhAT編集画面でWindow>Physics Assetをクリックすると、Physical Animationを設定するタブが開く
・ここでPhysical Animation Profileを作成、削除できる
https://i.gyazo.com/685a450dd01631ef7cfe1ee743e86260.png

・上部ツールバーにあるProfilesから、作成したProfileを選択できる
https://i.gyazo.com/db8fe81bf555283a12514800b793850b.png

・設定したProfilesは更にジョイント毎に適用する必要がある
・適用させたいジョイントを選択し、Detailsタブの一番下にあるPhysical Animationカラムで Add to profileする、複数選択可
https://i.gyazo.com/0f9136f84611e5cc0fdabda01c593a5c.png

・この時点でPhATでプレビューが可能になる、実際にゲームで適用させる方法は後述
・ Profileを適用するといろいろなパラメーターがでてくる、パラメーターは各ジョイント毎に独立している、まとめて変更可
・シミュレーションされなかったりしたらPhysicsカラムのPhysicsTypeを確認する、これがKinematicだとPhysicalAnimationは動かない

具体的な実装
PhATコリジョンがあるジョイントはそれぞれが、Body(FBodyInstance)というインスタンスになっている
・FBodyInstanceはスケルタルメッシュ(USkeletalMeshComponent)に配列で格納されている
・設定したProfileはこのFBodyInstanceに保存される

FBodyInstance | Unreal Engine API Reference


いままでのとの違い
https://i.gyazo.com/e3c9c9a7e742429640a193f317497dee.gif

https://i.gyazo.com/d4d01e4530a9392789fa0551356336fb.gif

左腕がPhysical Animation、右腕が今までの物理ブレンド
パラメーターはどちらも特に詰めておらず、肩の回転コンストレイン程度
Physical Animationが最高なのがわかる


PhysicalAnimationを実際に有効化する
プログラム側からの適用方法

・スケルタルメッシュが存在しているアセットで(Characterで良い)、新たにPhysicalAnimationコンポーネントを追加する
・スケルタルメッシュのコリジョン設定を変更する、デフォだとグリッチが出まくる
https://i.gyazo.com/75aa4371fb6a4715c4a809e0f893263c.png

・BeginPlay辺りにこんな感じのノードを組む
https://i.gyazo.com/59f24721f33f8f5e914fd81d36e48ef2.png
→SetAllBodiesBelowSimulatePhysicsはなくても動いたけど、解説動画で使用していたので

SetSkeletalMeshComponent
スケルタルメッシュをPhysicalAnimationComponentに登録する

ApplyPhysicalAnimationProfileBelow
PhAT編集画面で作成したプロファイルを実際に適用する、適用させたい一番親のボーンの名前を指定する

ApplyPhysicalAnimationSettingsBelow
プログラム側から直接プロファイルを設定する、PhATでプロファイルを用意する必要はない

・Bodyに適用できるProfileは1種類だけなので、Applyする度に設定は上書きされる

追加された関数一覧
Physical Animation | Unreal Engine Blueprint API Reference


PhysicalAnimationのパラメーターについて
https://i.gyazo.com/79669d249c5f3966a21be711a5940118.png

IsLocalSimulation あとでかきます
OrientationStrength あとでかきます
AngularVelocityStrength あとでかきます
PositionStrength あとでかきます
VelocityStrength あとでかきます
MaxLinearForce あとでかきます
MaxAncularForce あとでかきます

・Strength系は「誤差の許容み」で、小さいとガバガバ、大きいと元のアニメーションを尊重するようになる
・このパラメーターはFPhysicalAnimationDataで定義されていて、PhysicalAnimationComponentで演算してPhysXに渡している


パラメーター例
重いので別ページで
(false, 100, 10, 100, 10, 0, 0) // 全Body共通
https://i.gyazo.com/fe23121ac0d9ee124054493c3dddcba9.gif


わかり、注意点
・Bodyのコリジョンサイズが小さいとグリッチになりやすい、めり込んでもいいので、ある程度大きく取ると堅い挙動になる
・BodyのMassInKgいじると影響力もかわる、手動で調整しても良さそう
・A > B > C > D のような階層のジョイントがあり、末端でPhysicalAnimationやりたい時、AからD全てにBodyとProfileを作成したほうが安定した動きになる(ような気がする)
・PhysicalAnimationを追加すると以降コンパイルボタンがずっと?になる、解説動画だとなっていない
グリッチ出るのはどっかの設定がおかしいので見直す