animation
Unity
VRIK
VRM

FinalIK(VRIK)+Animationでアバター制御

やりたかったこと

研究室の教授がVRIK導入してくれたのでその使い方を勉強+Unityで汎用的な人型アバターの制御をやりたい
Animator触るのがめんどい、Blenderやだ

VRIKについて

FinalIKという有料アセットの一部。FinalIKは、簡単に言うと始点と終点を決めれば、その間のオブジェクトの位置角度を良い感じに整えてくれるアセット。
VRIK本来の使い方は、VRChatとかで人型アバターを扱いやすくするためのものなんだけど、その時の手順が

1.ヘッドセットとコントローラのオブジェクトをVRIKにアタッチ
2.VRIKがその位置に合わせて首から下のものを自動で制御

なので、1でつけるオブジェクトを別のものにすればアニメーション的な制御が楽にできるんじゃね?と考えた。

前提

VRIKが導入してある
Animation使える

やってみた

使用するモデルはunityちゃん。
Unityちゃんの親オブジェクトにVRIKコンポーネントを追加する
頭、腰と四肢にあたるオブジェクト(合計6つ)をVRIKにアタッチ。
完全にオブジェクト追従して欲しいので全てのRotation、PositionともにWeightを1にする。

↓こんな感じ
スクリーンショット (100).png

Unityちゃんを座らせたかったので、こんな感じに各オブジェクトを設置。

スクリーンショット (101).png

さあどうなる
スクリーンショット (102).png

失敗、グロい。
パッと見て、角度がおかしいので、良い感じに各オブジェクトの向きを調整
スクリーンショット (104).png

それでも失敗。
手は良いとして、足の曲がる方向が逆になってるので、これを制限しないとダメ。
FinalIKに入っているRotationLimitを使って可動域を変える必要がある。

色々使った結果一番簡単な、一平面だけの制限を与えるRotationLimitHingeを使う。ただ、座標系がEditor上の表示と違うのか、それとも俺が理解できてないのか不明だけどうまく設定できない。結局この↓設定でいくことに

右足
スクリーンショット (105).png

左足
スクリーンショット (106).png

腕を組みながら座っているようにAnimationを組んで、再生を押す
スクリーンショット (107).png

それっぽくなった
で、それぞれのオブジェクトをAnimationで操作
スクリーンショット (108).png

動かしてみる
ダウンロード.gif
それっぽくなった

他にも使ってみる

汎用的な使い方を目指していたので、他のアバターに使ってみた
スクリーンショット (109).png

…向きが違って失敗

標準のUnityちゃんに合わせて作成したので、VRMフォーマットのニコニコ立体ちゃんには使えなかった。というかFBX系のフォーマットが違いすぎるのは問題だなぁ…RobotKyleに使ってみた結果も似た感じに。

↓な感じみたいに、それぞれのオブジェクトの子に追従するものを付け加えればなんとなく補正はできるけど、アバターごとにするのはめんどう
スクリーンショット (110).png

感想

いちいち再生しないと動きが確かめられないのが面倒。
VRMを基準に作れば大丈夫そうだけど、すでにHumanoidBornが既に設定されているならAnimatorを触った方が楽っぽい。
でも、FinalIK(VRIK)+Animationの発想は違うものに使えそう。