Humanoid制御

Humanoid制御

Unityでは以下の3つのアニメーションタイプがあります。

○Legacy…ボーン名とアニメーション名が対応している旧型アニメーションシステム。Mechanim非対応
○Generic…ボーン名とアニメーション名が対応してアニメーションを行う。基本的に人型(Humanoid)以外の4足動物のアニメーションに使う。ボーン名とアニメーションが一対で登録しているので、作ったアニメーションを他のモデルに対応する場合、別途設定が必要。Mechanim対応
○Generic…人型アニメーションを使うための規格。Unity上でボーン設定をすることで、モデルが変わった場合でも同じHumanoidであればアニメーションを使いまわせる。Mechanim対応
※Mecanim を使うとアニメーションリターゲッティング、ステートマシンが使える。詳細はこちら

以下、Humanoid型について記述します。

HumanoidとはUnity内で用意されているモデルを動かすための規格の一つです。モデルのボーンごとに下記図のように設定項目があります。

このようにモデルのボーンをHumanoid型で用意されている型に合わせることで、モデルのボーンの違いであったり、名前の違いを回避できるというメリットがあります。
Humanoidアニメーションを作ると、「Animator.Head Nod Down-Up」や「Animator.Head Tilt Left-Right」といったようなプロパティでアニメーションが登録されます。アニメーションの値は、-1≦x≦+1の範囲で設定されるため、クォータニオンとかで動いているのだろうと思うのですが、クォータニオンではなく、「Muscle値」というものでアニメーション登録されています。ボーンの可動域(参考:人間の骨格可動域)のような各ボーンが動ける範囲が設定されています。「Animator.Head Tilt Left-Right」では首の可動域、‐40≦回転値Z≦40の範囲を-1≦z≦1に正規化をしてます。ですので、例えばAnimator.Head Tilt Left-Right=0.5だと、z=20となります。このように各b-ンごとに可動範囲が決まっているので値が0.5だからといって値が同じだとは限りません。このように正規化することによって人間のあり得ない骨格の回転をなくすようにしていると考えられます。事前に決められた範囲で動かすことになるので、指のアニメーションで貫通を防ぐことができます。
他にも、「Animator.Left Sholder Front-Back」といった値だと、肩の動くと同時にHipが回転するになっており、自然な動きになるように設定されます。

Animation Converter(有料)を使うことで、Humanoid⇔Generic型のアニメーションを変換できるのため、Genericで変換されたアニメーションをHumanoid規格に変換することができ、他モデルでも使えるようになります。Humanoidアニメーションを作るときは、Very Animation(有料)で作成するのが一番やりやすいと思います。また、複数モデル、カメラのアニメーション編集するときはScene Timeline(有料)等を使わないと、プレビューしながら編集できないのであると便利です。

Perception NeuronではHumanoid型でアニメーションを動かすようにしてます。おそらく他のモーションキャプチャもHumanoidを基準に作られているものが多いと思います。

個人的にまとめると、Humanoidを利用するメリットとデメリットは以下のようにまとめられます。

○メリット
・Humanoidにすることでモデルを変えてもアニメーションできる
・ボーンの可動域が決まっているため、不自然な動きになりにくい
・ボーンが連動して動くため自然な動きが作りやすい

○デメリット
・Humanoid型にアニメーションを変換、設定する必要がある。
・Humanoidのアニメーションの値がわかりずらい

最後にHumanoidとは関係ないのですが、unityのアニメーション「.anim」をHumanoidで編集すると、直感的な値で編集するのが難しく、Genericで編集するとフレームが大きくなると編集時に止まりやすくということが悩みどころです。