UE4 Blenderから持ってきたアニメーションの骨の位置がおかしくなる問題

やあ

Blenderで作った特定のアニメーションを、UE4に持って行ったら、ルートの位置に腰が来てしまう問題が起きたんだ。
その原因と解決策がわかったっぽいのでメモとして残しておくよ。

環境

UE4.26.2
・Blender2.91.2

実際に起こっている問題

f:id:pto8913:20211209114755p:plain 左がアニメーションを設定した状態
右がデフォルト

原因1?

Blender上でアーマチュアのスケールを変更していたこと。
(1, 1, 1)じゃないとだめなところを、(0.5, 0.5, 0.5)みたいにしていた。

実際に、スケーリングしたキャラクターとそうでないキャラクターで比較してみたところこうなった。
f:id:pto8913:20211209120541p:plain

スケールが原因だー!と思い、
1. Ctrl+Aでスケールを適用
2. アニメーションカーブのY座標もすべて0.5倍
アーマチュアの大きさをY座標に掛けるとアニメーションが壊れない blender.stackexchange.com
にして、再びUE4にインポートすると・・・

直りませんでした\(^o^)/
f:id:pto8913:20211209120603p:plain

原因2?

UE4のスケルトンのTranslation Retargetingに原因がありそうかも~

自分のプロジェクトでは、ほぼすべてのメッシュが、一つのスケルトンを共有しているので、Translation Retargetingをここに載っているように設定していた。

docs.unrealengine.com

f:id:pto8913:20211209120712p:plain

解決策?(これで解決になるプロジェクトもあると思います)
ここを変えれば直るんじゃねと思って、Pelvisの位置にあたる骨をAnimation ScaledからAnimationにすると。

f:id:pto8913:20211209120747p:plain
直った!

けど、これって他のアセットで問題が起こりそうだよな~ってことで、この解決策?はいったん保留。

解決策(自分の場合)

問題が起こっているアニメーションをエクスポートするのを、スケーリングしていないアーマチュアからやればいいじゃん!

手順
1. アーマチュアを複製し、複製したほうのアーマチュアのスケールを(1, 1, 1)に戻す※スケールの適用ではないです
2. 複製してスケールを(1, 1, 1)にしたほうのアーマチュアからすべてのアニメーションをエクスポート
3. スケーリングしているほう((0.5, 0.5, 0.5)など )のアーマチュアで、メッシュのみをエクスポート
4. UE4でそれぞれをインポートして使うだけ!

結果
f:id:pto8913:20211209120853p:plain

ちなみに、Translation RetargetingAnimationにした状態だと
f:id:pto8913:20211209120931p:plain
体が浮いてしまう

最後に

こんなことにならないようにアーマチュアを拡大縮小するのはやめよう!

他にも全部作り直すって手もあるよ()

・スケールを適用して、アニメーションカーブのY座標もスケーリングしたのに、UE4では直らないところ。
Translation Retargetingを変更すれば直ったけど、別の問題が起きそうだし・・・