元々関節に角度の付いたモデルがAuto-Rig Pro変換時に関節が変な方向を向くのを修正する

Blender Advent Calendar 2020 の21日として投稿です...（）
https://qiita.com/advent-calendar/2020/blender

↓ Auto-Rig Proでなんか関節の向きおかしくなる時の修正法です
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388152/8ea71d06-5151-f0ca-e1d7-1d56a00cb4d9.png>
前置きとかいいから [**【修正方法】**](#修正方法)にジャンプ

#前書き
脳貧血で倒れかける→嘔吐→寝込むのコンボを決めました。今年めっちゃ寒いし、年末で忙しいけど体を大切にね！

目標のかなり手前でめっちゃ手間取って完全遅刻してしまったので、その部分までで今回の記事とします。
ただ、わりと良い発見ができたんじゃないかなと個人的には思ってます。見つけられてないだけで、実はドキュメントに載ってるとか無いよね？？
　
　
VRoidでつくったテス子さんをBlenderに持ち込んでAuto-Rig ProのQuick Rig でリグを入たら関節がとんでもない事になってしまいました。
<img width=250 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388152/ffcf0a3a-5885-93cd-f150-3afb4aaa51bc.png>　<img width=250 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388152/ffca9d87-f2ff-180d-f61f-bbcf9f255de3.png>
よく見なくても関節が曲がって欲しくない方を向いています。
当然、肘膝を動かすとテス子さんは捻れてしまいました。
<img width=150 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388152/5c579118-2135-432d-8ea8-a4a003ed44b4.png>　<img width=150 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388152/0719fb26-bce6-5981-4e2e-1dd51fc4e1b0.png>　<img width=150 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388152/c432f750-5ce1-50fe-6695-601c4c6c4d3a.png>　<img width=150 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388152/dfc59333-922b-7176-1c78-3eff69db16cc.png>

#原因
調べた感じ、Auto-Rig Proは標準では肘膝関節にZ軸以外の角度がついた状態をサポートしていませんでした。なので、X脚やO脚を表現しようとしても関節そのものがそっちを向く事でしか対応してくれないんですね。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388152/ee82ae73-ea5f-7e49-8628-7002cdd94224.png>
↑ まっすぐ前後に回したいと思っても、関節がそっちを向いていません。IKならまだそれっぽく動かす事もできなくはないかもですが、FKにいったてはZ軸以外無効になっているので、まったく回す事ができませんね。

さらに相性が悪い事に、VRoidのモデルは標準で膝と肘に少し角度が入っていています。
（↓ 青が元々の骨位置。黄色がまっすぐ入れてみた骨。隙間がある事が分かる）
<img width=250 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388152/ae1c18de-cc91-dc7d-56d2-4d8365ad1835.png>　<img width=100 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388152/c3b0ebbe-a19e-915f-149a-ef90412495ff.png>
Auto-Rigはこれに反応してしまっているご様子、、、
膝や肘をまっすぐに調整しても良いのですが、関節の位置がずれてしまうし、せっかく元から入っている骨を生かせないのは個人的には嫌です。（細かい事言えば、その関節位置で動きの雰囲気変わっちゃうし）

なので、この問題を何とかしようとアレコレ試して、一応無理やりながらも方法が見つかったので、その方法のメモです。
では、実際に直していきます。

#修正方法
Quick Rigをつかった標準の手順でAuto-Rigを生成した所からスタートです。
当然、この段階では膝の向きも肘の向きも狙った方を向いていません。
<img width=400 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388152/467dfdc4-9133-d128-36e2-c90deddc5f7a.png>

###FKの修正（Reference Bonesの調整）
Edit Reference Bonesから編集モードに入ります。
プロパティーから太もも、スネ、上腕、前腕の4つが前を向くようにRoll値を直します。
<img width=400 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388152/c1d44dc8-0886-d781-41cc-6ad20351e53c.png>
※↓ ロール値の修正はここから
<img width=200 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388152/86756e76-c1d2-c2ec-63fd-c770bdf4b07c.png>
今回は`VRoidの骨の角度と合わせる`方法を使ってみました。（※見た目で正面を向くように調整しても良さそうです。）VRoidの数値から・・・

```
・左足：そのまま[VRoidのRoll値]
・右足：180-[AuroRig左足のRoll値]
・左腕：180-[VRoidのRoll値]
・右腕：180-[AuroRig左腕のRoll値]
```
となりました。理由は以下の2つ。
※VRoidそのまま数値を入れたら腕がIK-FK変化時に180°回転するようになった
※Auto-Rigの左足が-値だから右の-で入れたら腰のヘルパーが逆側した

ちなみに、見た目はこんな感じになります。
<img width=400 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388152/5a5882f7-1cd0-a056-1bd7-420a996d45a6.png>
上の説明と画像だと分かりにくそうだったので、今回使った実際のRoll値も残しておきます。

```
[左足]　thigh_ref.l=90    leg_ref.l=90
[右足]　thigh_ref.r=90    leg_ref.r=90
[左腕]　arm_ref.l=180    forearm_ref.l=180
[右腕]　arm_ref.r=0    forearm_ref.r=0
```
そして、ここポイントなんですが、8箇所全て数値を**Lock**します。
<img width=200 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388152/1a9fbb78-859d-ab12-acbd-7cfe3b817ab9.png>
ここまで終わったら、Match to Rigで骨を調整します。
<img width=400 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388152/cfcafacf-9fad-94d7-5f2a-3f9ed0527a6e.png>
腕は一見直って見えますが、逆に足は変な方を向いて見えます。
これは腕の初期がFK、足がIKだからです。なので、IK-FK Switchで切り替えると
<img width=400 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388152/8a0a8d57-fab5-88a3-e7fd-04a30159be73.png>
結果が逆転します。FKは直ってるけど、IKはまだって事ですね。
では次の手順でIKの方を修正します。

###IKの修正（Edit ModeでPoleの調整）
もう一度Edit Modeに入ります。
今回はEdit Reference Bonesからではなく、直接Edit Modeに移行して下さい。
[c_leg_pole.l] [c_leg_pole.r] [c_arms_pole.l] [c_arms_pole.r]の位置をEdit Modeで直接編集します。
（↓ 対象のボーンは下図のレイヤーに入っています）
<img width=200 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388152/fce65652-dbf4-7fef-64d9-ccb04f6bbb08.png>
※ leg poleはX軸、arms poleはZ軸の移動だけでOKです
<img width=200 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388152/93dcaf6e-3518-e030-3017-fe323d717472.png>
計算で何か上手い事見つからないかなと思ったんですが、今のところ見つかってないです。
手間ですがPose ModeのIK-FK Switchを切り替えながら、誤差の無い場所を探します。

ぶっちゃけかなり面倒なんですが、Pose ModeとEdit Modeを行き来しながらチクチクチクチク…切り替えた時に見た目に動かなくなるまで調整します。
<img width=200 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388152/ec7a4cf1-6941-f044-40c1-f4e3f1dc7340.png>
調整し終わるとこんな感じ。
これで、IK-FKを切り替えても変な位置にポールが移動しなくなりました。
<img width=300 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388152/6465e940-11bb-9fad-9417-047b40f73a2a.png>　<img width=322 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388152/11edfb51-6748-b131-b3f4-98b24c4ef409.png>
修正の手順としては以上で終わりです。

関節にZ軸以外の角度が入ってるモデルでも、任意の角度で関節が仕込めるようになりました。
Auto Rigの使い勝手が良くなるはず！
<img width=300 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388152/dcae3575-1b6c-ebc9-1238-edfe6b6b77f9.png>
下みたいな無茶な角度の骨でも、一応希望の角度に関節を仕込む事ができました。
<img width=300 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388152/0dd3f19a-cbbd-19ae-6919-bc014af774f1.png>　<img width=268 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388152/5961fd08-4033-e120-f118-e3bb1f408a20.png>
`注意：ただし、この調整を行うと「Snap IK>FK」を使った時に膝・肘の角度が合わなくなりました。また、他にも見つかっていない不具合が出てるかもしれません。無理をさせてるので本来起こらない不具合が起こる事もそりゃありますよね...`
そのあたりご理解の上で使ってもらえるとありがたいです。

#終わりに
[**Gumroad**に修正前と後のblendデータを一緒に入れたzipを置いておいた](https://gum.co/zrqLR) ので、よかった触ってみて下さい。（※"rig_tools"と"proxy_picker"も同梱してあります。使い方はAuto-Rig Proドキュメントを見てね）

この方法で生成したAuto Rigは元のモデルと関節位置が一致してる（はず）ので、ウェイトを移し替えを行わずBone Constraintを使って位置や回転を元の骨に戻してあげれば…とか、夢が広がります。そのうちテストしたい。

全然到達できなかった目標だった部分も、いつか挑戦したいなと思います。
ではでは～。