Rigifyで作成したHumanoidアニメーションをUnityにインポートすると足がガクガクする問題の忘備録
以下BlenderでRigifyを使いアニメーションを作成するとUnity内でIKがうまく反映されずに足がガクついてしまう問題を解決した経緯
どこで起きてる不具合か
Unity側にインポートする時、もしくはHumanoidに変換する際に生じる問題だと思っていたが、実際はBlender側(Rigify自体)の問題だった。
一度アニメーションとメッシュをFBX出力し、それをBlenderにインポートし直したところ問題が再現されたため発見。
何が問題?
どうやらボーンコンストレイントが悪さをしている模様。
Unityに出力する際には直接メッシュに影響を与えるデフォームボーンがHumanoidのボーン構造と一致し割り当てることが出来るが、RigifyではIKを含む補助ボーン以外のデフォームボーンにもコンストレイントが設定されており、この設定をUnityに持ち込めないためズレが生じてしまう。
具体的にはDEF_Shinボーン(ひざ下のボーン)に踵との距離の調整のためにストレッチコンストレイントが割り当てられており、角度しか出力しないと踵の位置が伸び縮みの分ズレてしまう。
解決方法
Rigifyのボーンの内部構造とコンストレイントの関係性をすべて調べあげ、Unityに反映できないコンストレイント(位置、角度、拡縮以外の全て)を取り除かなければならない。
が、そんなことするなら自分でリグを組んだ方が間違いなく早いし問題も起こりにくい。
本末転倒では?
Rigifyを使用する人はリグを組む工程を短縮したい人であるハズ。しかしこのIKのズレを解消するには1からリグを組むのに必要な知識と作業量を求められる。これでは結局自力でリグを組むしかないのでとても困る。
最善策
金はすべてを解決する
Blenderには有料のリグアドオンとして「AutoRigPro」が存在している。
このアドオンではUnity、UnrealEngine4への出力をワンボタンで調整してくれる機能があるため非常に使い勝手が良い。もちろんHumanoid変換を前提とした出力が可能なので、デフォームボーンにはボーンコンストレイントを使用しておらず、手足のIKのズレもなくなる。