インサイド Rigify 2.79
腕
ボーンのデータの流れ
上腕で説明するが基本的な流れは前腕でも同じだ。
- upper_arm_fk(IK でも同じ)を変化させるとその情報はトランスフォームコピーで ORG-upper_arm へコピーされる。
- この情報は ORG-upper_arm の子である MCH-upper_arm_tweak と MCH-upper_arm_tweak.L(R).001 を動かす。
- これらのボーンはそれぞれ子である upper_arm_tweak と upper_arm_tweak.L(R).001 を動かす。これはユーザーが操作できる tweak ボーンだ。
- 最終的なデフォームボーンである DEF-upper_arm と DEF-upper_arm.L(R).001 はトランスフォームコピー・減衰トラック・ストレッチを使って upper_arm_tweak と upper_arm_tweak.L(R).001 の情報をコピーする。
なぜ tweak ボーンへデータを2回もコピーしているのか
tweak にモディフィアがついているからだ。中間位置にある MCH-*tweak ボーンはその位置を計算するためにいくつかのモディフィアがついている。たとえば MCH-upper_arm_tweak.001 は upper_arm_tweak と forearm_tweak との情報をトランスフォームコピーすることでその位置を決定している。そのためユーザーが直接操作できない。なのでその子を使うことで位置計算後にユーザーが操作できるようにしている。
IK/FK の切り替え
ORG ボーンで IK/FK の切り替えを行っている。実装方法はドライバーでトランスフォームコピーの影響力を操作する方式だ。
IK
IK の実装方法はストレッチの有無を切り替えられる IK のリグを参照。
IK ボーンのデータの流れ
IK は MCH-upper_arm_ik についている。実際の IK ターゲットは MCH-upper_arm_ik_target だ。
- ユーザーが hand_ik を動かすと MCH-upper_arm_ik_stretch が減衰トラックとストレッチとでその位置をコピーする。MCH-upper_arm_ik_stretch には拡縮制限もついていて、Rig Main Properties の IK_Stretch を変更すると拡縮制限の影響力が変更される。これによってストレッチの有無を制御している。
- そして MCH-upper_arm_ik_target が MCH-upper_arm_ik_stretch のワールド位置を位置コピーでコピーする。
IK のストレッチは IK ボーンの「インバースキネマティクス > ストレッチ」を 0.1 にする方法で実装している。
背骨との連結
背骨のデフォームボーンと腕のデフォームボーンとはつながっていない。これはゲームエンジン等のほかのツールへエクスポートするときに問題になるかもしれない。
Rigify はパーツごとにリグ(+デフォームボーン)を生成するが、その生成順は未定義だ。なので他の部位のデフォームボーンの存在を仮定できない。そこで存在が確定してる ORG ボーンにつなげるようになっていると推測される。
脚
腕と同じなので省略。
足
かかとにある3つの MCH ボーンはかかとの回転軸になっている。2つの rock ボーンはY軸周りの回転軸で、MCH-heel.02_roll.L(R).001 はX軸周りの回転軸だ。
あとはオーソドックスな reverse foot rig だ。
背骨
ボーンのデータの流れ
腕や脚では IK/FK の切り替えに ORG ボーンが使われていたが、背骨ではそれがないので ORG ボーンは使われていない。ユーザーが torso を動かすと、その子である MCH ボーンが動く。すると MCH ボーンの子である tweak が動き、最終的にデフォームボーンがトランスフォームコピー・減衰トラック・ストレッチを使って tweak ボーンの情報をコピーする。
torso から MCH-spine.001・MCH-spine.002 への分岐は、腰の回転を実装するためだと思われる。
腰の操作
hip はコントローラーが腰の位置にあるが、実際のボーンははへそのあたりにある。hip を操作すると MCH-spine と MCH-spine.001 とがトランスフォームコピーで動く。
胴の操作
chest を操作すると、MCH-spine.002 と MCH-spine.003 とがトランスフォームコピーで動く。
首・頭
背骨の延長なので省略。
鎖骨
鎖骨のコントローラーである shoulder を動かすと、トランスフォームコピー(ワールド)で ORG-shoulder が動く。すると ORG-shoulder の子でデフォームボーンの DEF-shoulder が動く。
ORG-shoulder の親は ORG-spine.003 で、その親はtweak_spine.003 だ。腕は ORG-shoulder につながっている。