kawaiiを極めるために
VRChat標準のVRIKだと、ビクトリーポーズのときに脇が外側に張ってしまい、かわいくありません。
そこでVRIKのパラメータを調整してOverrideすると、こんな感じにかわいくなります。
ひざを内股にしたり、手を上げたときの脇と肩のねじれ?も改善できたりします。
これを実現するのが、この記事で紹介するVRIK Overrideです。(いま命名)
VRIK Override
VRChat標準のVRIKの設定を上書きします。
まだ研究中なので、不要な手順とかもあるかもしれません。ぜひご指摘ください!
今後の課題もクリティカルなのが大量にあります。
モデルはシャーロちゃんで動作確認しています。
必要なもの
- Unity
- VRChat SDK
- Final IK (Unity Asset Storeで$99くらい)
基本のセットアップ
- Unity, VRChat SDK, Final IKをセットアップしておく
- VRC_AvatarDescriptorと同じGameObjectにVRIKを追加する
- Skinned Mesh RendererのついているGameObjectを無効化する
- Dynamic Bone, Dynamic Bone Colliderをすべて削除する(不必要に重くなるのを防げるかもしれないのでやっておく)
- キャラクターのPrefabを、VRC_AvatarDescriptorがついているGameObjectの子に追加する
- VRIKとIK Execution Orderを、追加したPrefabのルート(上図 Shaclo Custom VRIK)に追加
- 追加したPrefabのルートからAnimatorを削除
- IK Execution OrderのIK Componentsを、親のVRIK、子のVRIKの順番で追加する
- 子のVRIKのHead TargetとPelvis Targetを、親のHead, Pelvisに設定する
- 左手、右手、左足、右足のTargetも、親のボーンに指定する
- LocomotionはWeightを0にしておく(うまく動いてくれない)
- VRC_AvatarDescriptorのFace Meshを子のSkinnedMeshRendererに差し替える
- VRC_AvatarDescriptorのView Positionを少し前に持ってくる(一人称視点で頭が邪魔になってしまう)
あとは調整!
ここからはお好みで。別のシーンを作ってエディタ上で調整できるようにしておくと、はかどります。
全パラメータについての詳細はここでは解説しません。
- Left/Right ArmのSwivel Offsetをいい感じに調整する。これで脇が締まる。
- Shoulder Rotation ModeをFrom Toにすると、手を上げたときに肩のねじれがなくなる気がする
- Left/Right LegのSwivel Offsetをいい感じに調整する。これで内股になる。
仕組み
思いついたきっかけはこの投稿。
https://vrcat.club/threads/making-final-ik-behave-correctly-on-avatars.1449/
VRC_AvatarDescriptionのとなりにVRIKを仕込んでおくと、VRChatはそのVRIKを使ってくれるため、IK Execution Orderが期待通りに動く。ただし、設定したパラメータはすべて上書きされてしまう。
では、VRChatのVRIKのあとに自前のVRIKが動けば、こっちで設定したパラメータで動くのでは? IK Targetを、VRChat側のVRIKが解決したあとのボーンにすれば、手や頭のトラッキングはできる…かも! という発想です。
いろいろ試してだめだったやつ
- Animation OverrideでVRIKのパラメータをいじ…れない
- VRIKのパラメータはIKSolverVRクラスの子にあるので、Animatableでない。
- IK Followerを自前VRIKのターゲットにする
- IK Followerの位置を描画してみたら、ぜんぜん期待通りの位置にない。
- IK Followerは回転を保持していないらしい…。
- 親の不要なSkinnedMeshRendererのついたGameObjectを削除する
- VRChat側のVRIKが子のスケルトンを参照してしまった
- PelvisのIK Targetを指定しないでおいたら、特定の角度で不連続に体が回ってしまった
今後の課題
- 重くない? 大丈夫?
- 一人称視点で頭が邪魔になる。頭のSkinnedMeshRendererのRootBoneを親のHeadにすればいい? でもそれって体とずれない?
- なんか腰や足がふらふらして安定しないことがある?
- 指が動かないので、CCDIKとか使ってやる?
- Finger Rig, Finger PoseはUploadで弾かれてしまう
- 親のAnimatorから子のAnimatorのHumanBoneをアニメーションできない。IK使う? Joint使う?
- 目やまぶたが動かないので、自前でアニメーション組んで再生する?
- 表情を変えるなど既存のAnimation Overrideが動かない。変換スクリプト書く?
ご意見、ご提案はコメントや Twitter @tyounanmoti まで。お待ちしております!