Blender で伸縮する脚のリグ
Driver を使わないバージョンは Rigify の足が伸びるリグ を参照.
誇張表現として体の部位を伸縮させることはよくある. それだけなら Stretch To や IK の Stretch: がつかえる. しかし IK の Stretch は以下のような欠点がある.
足を動かす際にいちいち影響力を変更しなければならない
なぜなら Stretch の影響力が強いと IK が働かないからだ. 伸縮させるときは Stretch の影響力を1にし,さらにボーンをスケーリングしなければならない. 作業量の多さはそれだけ生産性を下げる.
体積が保存されない
IK のストレッチは単純なスケーリングだ.伸びれば大きくなり,縮めれば小さくなる. しかしアニメーションにおいては逆が望ましい. 物体の体積が保存されないと違和感が残る.
IKでストレッチする
ストレッチする IK 用のボーンを作成しそれに IK をつける. デフォーム用のボーンは Copy Rotation と Stetch To でコントロールする. こうすることでストレッチの際に体積が保存されない問題を解決する. IK の Stretch の影響力は Driver でコントロールする.
ボーンの初期配置
T_leg.L は独立している.
IK 用ボーンの設定
D_upperLeg.L と D_lowerLeg.L とを複製してそれぞれ IK_upperLeg.L,IK_lowerLeg.L とリネームする. 複製したボーンはデフォームを無効にしておく(Pose モードで Shift + W > Deform). T_leg.L をターゲットとして IK_lowerLeg.L に IK をつける.Chain Length: は2.
デフォーム用ボーンの設定
IK の回転と伸縮をデフォーム用ボーンにコピーする. D_upperLeg.L と D_lowerLeg.L とに Copy Rotation と Stretch To とをつける. 設定は以下の図を参照. ボーンが暴れたときは T_leg.L をホームポジションに戻して Stretch To の Reset を押す. D_foot.L の Inherit Scale のチェックを外す.
Driver の設定
現状ではスケールが必要になるたび Stretch を操作しなければならないため,使いづらい. IK ターゲットが離れた時だけ自動的にスケールするように Driver を設定する.
IK_lowerLeg.L の Stretch: に Driver をつける. Driver では T_leg.L と D_lowerLeg.L との距離がホームポジションより離れた時に1になるようにする.
現在の距離は Value: のところに表示されている. この例では 3.48 だ. distance がこの値より大きいときにストレッチが有効になる. この Driver をD_upperLeg.L の Stretch にもコピーする.
関連記事
Blender 記事の目次