ゲーム制作日誌005 BlenderからUnityでアニメーションをインポートすると手足の位置がガクガクする問題を解決する

Unity上でアニメーションを編集するアセットは存在しますが、正直機能が限定的です。Blenderで編集してしまった方が手っ取り早いので、そうしてしまいたいのですが、そこには大きな問題が発生します。それは、Unityへのインポートです。

Blenderでせっかく手足の位置を合わせたのにUnityでインポートすると手足の位置がガクガク!殊更Hな用途では手足の位置がずれるのは困るんで、それを解決します。

当方の環境について

まず、当方の環境について書いておきます。

Blender + Auto rig Proアドオンで作成しています。Auto rig ProはIKでアニメーションを編集した後、付属のエクスポーターでfbx化すると全フレームにキーを打ってFK化してくれます。つまり、FKで全フレームに手足の位置情報を入れているのでIKを使わなくても絶対ズレないというわけです。※

※編集時と同じ3Dモデルを使用してアニメーションさせた場合。当然3Dモデルのサイズが違えば手足はズレます。

理論上は手足のズレはないはずなんだけど

全フレームに同じ手足の位置情報を入れているので、絶対ズレない……はずなんだけど、なぜかUnityにインポートすると手足の位置がずれる。

まあソフトも違うし、そんなもんなのかな、なんて思っていたのですが、ふとUnityに取り込んだアニメーションのドープシートを見たところ驚愕の事実が発覚。

全フレームにキーを打ってるはずなのにキーが歯抜け状態になっているではないか!これじゃあ手足の位置がガクガクにもなるよね!

キーが歯抜けだと手足の位置がガクガクするのは何故か?

理由がわかったら早速修正……の前に!

なぜキーが歯抜けだとガクガクするのかおさらい。

まず、上の画像を直立状態の足だと思ってください。

次に、かがんだ状態を作ります。では補間された中間はどうなるのか?

このようになります。足の位置がずれてるのがおわかりいただけたのではないでしょうか。

補間された情報は地面の位置なんか知らねえよと言わんばかりですが、それもそのはず、距離と角度の中間は上の画像で合っているのです。

キーが歯抜けだとガクガクするのは、歯抜け情報を補間した結果だったんですね。

アニメーションが圧縮されるという致命的見落とし

Unityへのインポートしたアニメーションは設定により自動的に圧縮されます。いらないキーフレーム情報が捨てられているのです。

キーフレーム情報が沢山捨てられた結果、補間によりガクガクになります。

正直言いますと、我流でやってる私はこの事実を全く知りませんでした。

圧縮設定を変えて手足の位置ガクガク問題解決

無圧縮に設定する事を考えましたが、Unityマニュアルによるとそれは推奨されず、ファイルサイズも大きくなってしまいました。

とりあえず圧縮する設定にして、回転、位置、スケール各エラーの数値を小さめに設定。すると、手足の位置の気になるようなガクガクが消えました。

アニメーションにもよるのでしょうが、検証時のアニメーションでは0.04がファイルサイズと精度がちょうど良かったです。

インポートの設定はちゃんと検証しよう

手足の位置がガクガク問題もほぼ解決し、かつファイルサイズを小さくすることができました。

そもそもインポートの設定をちゃんと検証していれば早く気がついたわけで、分からないこと放っておかない、マニュアルは読む。それを忘れないようにしないといけないですね。やはり基本が大事だとつくづく気付かされました。