ヒューマノイドモデルのアバター作成に失敗:こういう原因もあるよ

Blenderで作成した人型モデルをUnityにインポートした後、Animation TypeをHumanoidに設定してApplyすると、

「Required human bone 'RightFoot' not found.」(必要な'RightFoot'ボーンが見つかりません)

というエラーでアバター作成に失敗する問題に遭遇。原因特定に少し時間がかかったのですが、似た問題に遭遇する人がいるかもしれないのでメモ。

ボーンを確認してみたのですが、

と、ボーン名・トランスフォームはすべて正しくセットされているにもかかわらずの症状でした。

正しく左右対称なボーン名、正しい階層構造

にも拘わらず消えぬエラー・・・!

何故かRight Upper LegにLower_Leg_Rが割り当てられている・・・!

原因はボーン名と頂点ウェイト名のミスマッチ

Blenderでよく見ると、UpperLegに対応するボーンのウェイトを決める頂点グループは左右それぞれボーンに対応した名前で「Upper_Leg_L」「Upper_Leg_R」と名付けたつもりだったのですが、右だけ「upper_Leg_R」と頭文字が小文字になってました。

つまり、ボーン名は「Upper_Leg_R」なのに、ボーンウェイトを決める頂点グループ名が「upper_Leg_R」と、

名前が間違ってたために対応する頂点ウェイトが存在しないと見做されたのが原因だったようです。

注目すべきは、「見つかりません」とゆわれたボーンはUpper_Leg_Rではないこと。それがちょっと原因をわかりにくくしてた一因でもありました。Unityの具体的な処理までは知りませんが、たぶん「対応する頂点ウェイトを持った頂点がゼロならそのボーンは不正なボーンなので無視する」みたいな感じで飛ばされちゃったためにそれ以降の列挙が全部おかしくなったんじゃないでしょうか。