Unityで動かすためのHumanoidアニメーションをBlenderで自作する(初歩編)
UnityのHumanoid用アニメーションをBlenderで自作する際、腕と脚をIKにする方法を書きます。
FKとの切り替えや、もっと高度なセットアップは自力で頑張ってください。
対象:BlenderとUnity中級者以上、
IKとFKに関してある程度の知識がある方、
BlenderでIKを使用したキャラクターアニメーションを作ったことはあるけど、UnityのHumanoid用に設定する方法が分からない方
環境:Blender4.2, Unity2022.3.22, VRoid StudioのVRM
得られるもの:UnityのHumanoidとして読み込み可能なBlender用簡易アニメーションリグの作り方
ステップ0 3Dキャラクターを読み込む
↑キャラクターのデータがFBXならFBXとして、VRMならアドオンを使うなどでインポートします。
↑この際、アニメーションを付けるのに邪魔になるボーンを別コレクション(レイヤー)に移して非表示にすると、後の作業が楽になります。
↑また、Rootボーンが邪魔な場合は削除するか、必要な場合はHipの接続を解除すればOKです。
↑この状態でHipにあたるボーンを掴んで動かしたら、全部ガーッと動きます。
この状態ではFKなので、ここから腕と脚をIKで動かせるようにしていきます。
ステップ1 脚のIKを設定する
まず脚のIKを設定します。
IKを制御するコントロール用のボーンを作成します。
片足ずつ説明しますが、両脚を並行して設定したりしても構いません。
後述しますが、VRoid Studio→VRM Add-on for BlenderでインポートしたVRMのボーンは名称規則が左右対称になっていないので、編集モードでの対象化・ポーズモードでのポーズ反転が無効になり厄介です。
面倒ですが、編集モードでボーンの名称を対象なものに再設定したほうが後の手間を減らせるでしょう。
1.1 コントロール用ボーンの作成
まず足首にあたるボーンを複製し、同じ位置に配置します。
そのままでは名称の末尾に.001が付いただけで見分けにくいので、_Control_Lなど一意の接尾語を付けましょう。
また、視覚的に分かりやすいよう、複製元のボーンよりサイズを変更しておいてもいいですが、位置と角度だけは複製元のボーンと同じにしましょう。
このコントロール用ボーンにはウェイトが乗っておらず、複製元のボーンにはウェイトが乗っている状態です。
1.2 コントロール用ボーンの独立
作成したコントロール用ボーンは上の階層のボーンを親としているので、これを全てのボーンから独立させます。
[Alt]+[P]で親子関係をクリアさせます(Yキーでも可)。
Rootを残していた際は、Rootを新しい親に設定します。
1.3 IKの追加
ポーズモードで、コントロール用のボーンを選択した次に膝にあたるボーンを追加選択し、[Shift]+[I]でIKを設定します。
ボーンコンストレイントの項目からIKを追加/設定してもOKです。
これで簡単なIKは設定できましたが、膝や足首の向きを設定するのが不便です。
次の項で、これらを解決します。
1.4 コントロール用ボーンの回転をオリジナルの足首ボーンへコピーする
複製元の足首のボーンにボーンコンストレイントの回転コピーを追加し、コントロール用ボーンをコピー元に設定します。
これでコントロール用ボーンを回転させると、ウェイトの乗ったオリジナルの足首ボーンが同期するようになります。
次の工程で邪魔になるので、編集モードに切り替えてオリジナルの足首ボーンを[H]キーで非表示にします。
1.5 膝のポールターゲット用ボーンを作成する
膝の向きを決めるポールターゲットとなるボーンを作成、ポールターゲットとして設定します。
編集モードで、膝のボーンのヘッド(膝関節の位置)を選択し、ここから[E]キーで新しくボーンを生やします。
これを[Y]キーで分離し、[G]+[Y]キーで1mほど前方に移動させます。
その後コントロール用ボーンを追加選択し、[Ctrl]+[P](MacはCmd+D)で新しいボーンの親にコントロール用ボーンを設定します。
新しいボーンは「KneeTarget_L」など、適当な名前を付けましょう。
1.6 膝のポールターゲットを設定する
ポーズモードに戻って、膝ボーンのIKの「ポールターゲット」に自身のオブジェクトを、「ボーン」に新しく追加したポールターゲット用のボーンを設定しましょう。
すると、いきなりキャラクターの脚がねじれてやばいことになる場合があります。
この際は、「ポールの角度」をうまく設定することで、ねじれが解消されます。
キャラクターのボーン構造によっては、最初からねじれが無かったり、ねじれの解消に小数点以下の細かい微調節が必要な場合もあります。
微調節の際は、[Tab]キーで編集モードのオリジナルと比較しつつ、[Shift]を押しながら「ポールの角度」の数値入力欄をドラッグすると良いでしょう。
これで、コントロール用ボーンを動かすだけで簡単にIK付き脚のアニメーションが作成できます。
足首の向きに併せて膝の向きも自然に制御できるほか、膝の向きだけ調整することも可能です。
このリギングは元のボーン階層構造を破壊しないため、UnityのHumanoidとして読み込ませても正常に動作します!
ステップ2 腕のIKを設定する
腕のIkの設定は、ステップ1の流用となるため、説明をかなり省略します。
2.1 コントロール用ボーンの作成
編集モードで、手首にあたるボーンを複製し、一意の名前を付け全てのボーンから独立、もしくはRootを親とします。
2.2 コントロール用ボーンの回転をオリジナルの手首ボーンへコピーする
ウェイトの乗ったオリジナルの手首ボーンに、ボーンコンストレイント:回転コピーを追加、ターゲットをコントロール用ボーンに設定。
コントロール用ボーンの回転がオリジナルの手首ボーンへコピーするようにします。
2.3 IKの設定
前腕にあたるボーンに、前項で作成したコントロール用ボーンをターゲットとしたIKを設定。
2.4 ポールターゲットの作成/設定
肘の後方にポールターゲット用のボーンを作成し、コントロール用ボーンをその親に設定する。
名称は「ElbowTarget_L」など適当なものでよし。
先述のボーンをポールターゲットに設定。
例によってねじ切れたりしているのでポールの角度を調整し、ねじれを無くす。
これで腕のIKも設定できました。
脚のIKと同じく、コントロール用ボーンの操作だけで自然に動かせるほか、肘の角度の調整もできます。
ステップ3 アニメーション作成を手助けするセットアップ
3.1 触らないボーンを非表示にしておく
ステップ0でも行いましたが、アニメーションの設定に使用しないボーンは別のコレクション(レイヤー)に分けておくとすっきりしていい感じです。
3.2a ボーンを左右対称として認識させておく
現在の設定でもアニメーションを手付けすることができなくはないですが、ボーンの名称が左右対称になっていないと、歩きモーションで左右反転させるなどが面倒くさかったりします。
Blenderでは「.R」「.L」、もしくは「_R」「_L」などの接尾語がついていると、システムが「このボーンは対称なボーンで、反対側にも同じ機能のボーンがある」と認識してくれます。
このほか、「right wrist」「Left_UpperLeg」など、接頭語に左右を決定づける単語が含まれていても対称なボーンと認識してくれるようですが、詳しくは知りません。
リネームする際、先に片側のボーンを「UpperLeg」「LowerLeg」「Foot」「Toe」など接尾語無しで命名し、編集モードにて[W]キー/名前/自動ネームでオブジェクト座標から自動で左右の接尾語を設定すると楽です。
片側の自動ネームを済ませてから、反対側のリネームも行いましょう。
3.2b ボーンの軸方向を左右で統一する
Blenderでアニメーションを左右反転コピーする際に厄介なのが、ボーンの軸方向です。
ボーンの軸方向が左右でそろっていないと、反転コピーがうまくいきません。
特にVRoid Studio→VRM Add-on for BlenderでインポートしたVRMのボーンは、軸方向が左右で異なる場合が多いです。
アニメーションを設定した後にボーンの軸を変更すると、アニメーションの結果が壊れることもあるので、Humanoidアニメーションを作ると決めた場合はなるべく早い段階でボーンの軸方向を統一させましょう。
⚠注意⚠
ボーンの軸方向の変更は破壊的であるため、あとから元に戻すことはできません!
後にアバターとして同じキャラクターモデルを使用したり、既に作成済みのアニメーションがある場合は、軸方向の変更による不具合が起きる可能性があります。
腕と指の軸方向を統一する場合は、まとめて選択して[Shift]+[N]で「ローカルを再計算/正方向/グローバル+Y軸」を適用。
胴体~首と脚の軸方向を統一する場合は、まとめてまとめて選択して[Shift]+[N]で「ローカルを再計算/正方向/グローバル+Y軸」を適用。
これでアニメーションの左右反転が可能になりました。
ポーズモードで反転させたいボーンを選択し、[Ctrl]+[C]で現在のフレームのポーズをコピー、[Shift]+[Ctrl]+[V]で反転ペーストできます。
しかし、左右反転はあくまでオブジェクトの原点から反転するため、歩いて元いた場所から離れすぎると「反転はされてるけどY軸をまたいで遠くにペーストされちゃった」という事態も起きえます。
この際は、ムーンウォークみたくその場で歩かせてRootなどの移動アニメーションと組み合わせる必要があります。
ステップ4 Unityにインポートする
Blenderで設定したアニメーションをUnityへ持っていく方法はたぶん誰かがどこかでいくつか書いている気がするので、注意点だけ書きます。
インポートしたアニメーションが、Blenderで作ったものとすこしずれている場合
インポートしたアニメーション付きモデルのアニメーションタブを開き、各アニメーションの設定「Root Transform Rotation」「Root Transform Position(Y)」「Root Transform Position(XZ)」の項目「Based Upon」を全て「Original」に、Bake Into Poseのチェックを全てオンにします。
たまにloop match が黄丸🟡や赤丸🔴になっていることがありますが、これはアニメーションの開始時と終了時でポーズが違う場合に出る警告ですので、無視しても構いません。
基本的にはこれでズレが解消されることが多いですが、体格やメッシュが異なるとズレが生じてしまうようです。
完全解決するには、Unity上で動かしたい3Dキャラクターと同じモデルをBlenderで読み込み、アニメーションを設定し、メッシュ・アーマチュア・アニメーションをひとつのFBXデータとして書き出し/読み込む必要があると思われます。
インポートしたはずのアニメーションが見当たらない
キャラクターのFBXファイルなどを読み込ませた後、同じモデルにアニメーションデータを含めて更新した際、確かにエクスポート時にはあったはずのアニメーションが、Unityでは見つからない場合があります。
この場合は、先述のアニメーションタブから新しくAnimation Clipを追加し、行方不明のアニメーションが無いか確認しましょう。
モデルを削除→新しく置き換え、ではなく、エクスプローラー上で上書き→Unity上で反映させた場合に起こりやすいのかもしれません。
この方法でも見つからなかったら捜索願を出しましょう。
以上
ネットにぶん投げ備忘録でした。
この記事が気に入ったらサポートをしてみませんか?