前回に引き続きIK制御に関連したリグの作り方です。IKで制御されている関節の位置にコントローラーを配置して、そのコントローラーを回転してアップベクターを制御するリグの作り方を書いてみます。
このリグは好き好きあると思いますが、IKの「モディファイヤ依存ループ」を回避する方法として紹介してみたいと思います。基本的には「IKゴールの移動範囲を制限する方法」と同じで、IK制御に関連しない階層を使用するのがポイントです。
作成手順です。
- IKとアップベクターが設定されてたシーンファイルを準備します。
- ロケータを3個追加します。
追加したロケータはそれぞれ、スケルトンの位置、アップベクター位置、IKゴール位置に配置します。アイテムの配置はドロップアクションの「位置を一致」を使用すると便利です。 - ロケータに親子関係を設定します。
アップベクターに配置したロケータを、IKゴールに配置したロケータにペアレントします。IKゴールに配置したロケータを、IKゴールにペアレントします。
アイテムのペアレントはドロップアクションの「同位置でペアレント」を使用すると便利です。 - スケルトンの「ワールド位置」を、スケルトンの位置に配置したロケータにリンクします。
チャンネルビューポートから「ワールド位置」をスケマティックに追加して、ロケータの「ワールド位置」にリンクします。これにより異なる階層にあるロケータが、スケルトンにペアレントしたように動作します。 - 同様にアップベクターの位置に配置したロケータの「ワールド位置」を、アップベクターにリンクします。
本来はスケルトンの位置のロケータに、アップベクターを直接ペアレントできればスマートなのですが、「モディファイヤ依存ループ」が発生してしまいます。このため異なる階層にあるロケータの「ワールド位置」をアップベクターにリンクすることで「モディファイヤ依存ループ」を回避しています。 - スケルトンの位置のロケータの回転Yを、IKゴール位置のロケータにリンクします。
これでスケルトンの位置にあるロケータを回転させることで、アップベクターの位置を変更することができるようになります。
このあたりのリグの組み方がわかると、IKの「モディファイヤ依存ループ」に苦しまずに済むかも知れません。