(当記事では、MechaStudioの拡張機能である拘束(コンストレイント)の作成機能を使用しています。)
腕のリグの概要
腕のリグは、「手首」のコントローラーで腕のIKハンドルと手首を操作し、「肩」のコントローラーで腕のIKハンドルの極ベクトルを操作する仕組みになります。
各コントローラーの作成
腰のコントローラーと同じ要領で、各ジョイントの位置にサイズ「10、10、10」のコントローラー用の立方体オブジェクトを作り、ポリライン表示にします。
「LeftWrist」(左手首)ジョイントの位置には「LeftWristBox」(左手首)コントローラー、「LeftShoulder」(左肩)ジョイントの位置には、「LeftShoulderBox」(左肩)コントローラーを配置します。
「LeftClavicle」(左鎖骨)ジョイントの位置には「LeftShoulderBox」(左肩)コントローラーの親となる「LeftClaviclePos」(左鎖骨位置)ヌル オブジェクトを配置し、肩のジョイントの「40」くらい後方にはIKの極ベクトル用の「LeftShoulderPoleVector」(左肩極ベクトル)ヌル オブジェクトを配置します。
ヌル オブジェクトは、位置を合わせたいジョイントを選択した状態でヌル ツール(N)を使って作成し、オブジェクト ウィンドウ(Ctrl+Q)で「移動」を「0、0、0」等にすることで位置を調節します。
各コントローラーを配置したら、オブジェクト パネルで階層位置を修正します。
「LeftWristBox」(左手首)コントローラーは、「WaistBox」(腰)コントローラーの子の階層とします。
「LeftShoulderBox」(左肩)コントローラーの親となる「LeftClaviclePos」(左鎖骨位置)ヌル オブジェクトは、位置拘束用なので階層はどこでもいいですが、全てのコントローラーの親である「Base」(ベース)コントローラーの子の階層とします。
「LeftShoulderBox」(左肩)コントローラーはその子の階層とし、「LeftShoulderPoleVector」(左肩極ベクトル)ヌル オブジェクトはまたその子の階層とします。
ヌル オブジェクトを鎖骨位置に拘束
各コントローラを配置したら、ツール バーの「ペアレント拘束 ツール」をクリックして、
ツール ウィンドウ(Ctrl+T)の「回転の差分をオフセットにする」、「位置の差分をオフセットにする」をONにします。
これによって、拘束されるオブジェクトと回転や位置の違いがある場合でも、その違いをオフセット値とすることで、拘束されるオブジェクトの現在の回転や位置を維持することができます。
「LeftShoulderBox」(左肩)コントローラーの親である①「LeftClaviclePos」(左鎖骨位置)ヌル オブジェクト、②「LeftClavicle」(左鎖骨)ジョイントをクリックして、「LeftClaviclePos」(左鎖骨位置)オブジェクトを「LeftClavicle」(左鎖骨)ジョイントにペアレント拘束します。
この仕組みによって、「LeftClaviclePos」(左鎖骨位置)ヌル オブジェクトの子である「LeftShoulderBox」(左肩)コントローラーは、「LeftClavicle」(左鎖骨)ジョイントの直接の子であるかのように動作します。つまり、「LeftClavicle」(左鎖骨)ジョイントを直接マニピュレータで操作して回転させるような場合でも、「LeftShoulderBox」(左肩)コントローラーは「LeftShoulder」(左肩)ジョイントの位置を維持できます。
このように、コントローラーをジョイントの直接の子とせず、ジョイントの位置に拘束されるヌル オブジェクトの子とすることによって、コントローラーの階層構造をジョイントの階層構造と分離することができ、コントローラーの選択や操作が簡単になります。
(sakura_rigged2_4.toy)
腕のIKハンドルの作成
「ツール」メニューの「オプション」ダイアログで、『IK拘束の「アタッチ」をONにする』をOFFにしておきます。これによって、作成するIKハンドルの「アタッチ」はOFFになり、エンド ジョイントに追従しなくなります。
IKによって肘の曲がる向きを指定するため、オブジェクト ウィンドウ(Ctrl+Q)の「全般」タブで「LeftElbow」(左肘)ジョイントの「回転」を「0、-20、0」にセットすることで、左肘を「20」度ほど曲げておきます。
この状態で、ツール バーの「IKハンドル ツール」(I)をクリックして、
①「LeftShoulder」(左肩)ジョイント、②「LeftWrist」(左手首)ジョイントをクリックしてIKハンドルを作成し、オブジェクト ウィンドウ(Ctrl+Q)で「LeftWristIK」(左手首IK)とリネームしておきます。
オブジェクト パネルで、作成した「LeftWristIK」(左手首IK)IKハンドルを「LeftWristBox」(左手首)コントローラーの子の階層に配置します。これによって、「LeftWristBox」(左手首)コントローラーを移動させると、子である「LeftWristIK」(左手首IK)IKハンドルも移動することになります。
階層を整理したら、オブジェクト ウィンドウ(Ctrl+Q)の「全般」タブで、「LeftWristIK」(左手首IK)IKハンドルの「移動」を「0、0、0」にセットすることで、「LeftWristBox」(左手首)コントローラーの中央に移動します。
(sakura_rigged2_5.toy)
手首の回転を拘束
「LeftWrist」(左手首)ジョイントの「位置」は、「LeftWristBox」(左手首)コントローラーの子となっている「LeftWristIK」(左手首IK)IKハンドルによってコントロールされます。そこで、「LeftWrist」(左手首)ジョイントの「回転」だけを、「LeftWristBox」(左手首)コントローラーに拘束します。
ツール バーの「回転拘束 ツール」をクリックして、
ツール ウィンドウ(Ctrl+T)の「回転の差分をオフセットにする」をONにします。これによって、拘束されるオブジェクトに回転の違いがある場合でも、その違いをオフセット値とすることで、拘束されるオブジェクトの現在の回転を維持することができます。
①「LeftWrist」(左手首)ジョイント、②「LeftWristBox」(左手首)コントローラーをクリックして、「LeftWrist」(左手首)ジョイントの回転を「LeftWristBox」(左手首)コントローラーに拘束します。
IKの極ベクトル ターゲットのセット
オブジェクト ウィンドウ(Ctrl+Q)の「IK拘束」タブで、「LeftWristIK」(左手首IK)IKハンドルの「極ベクトル ターゲット」をONにし、「LeftShoulderPoleVector」(左肩極ベクトル)ヌル オブジェクトを選択します。
コントローラーの動作
これで腕のリグが完成しました。各コントローラーの動作を確認してみます。
「LeftWristBox」(左手首)コントローラーを移動することで、腕のIKハンドルと手首の位置を操作できます。
これは、「LeftWristIK」(左手首IK)IKハンドルが「LeftWristBox」(左手首)コントローラーの子になっているためです。
「LeftShoulderBox」(左肩)コントローラーを回転させることで、肘のねじれ方向を操作できます。
肩の後方にある「LeftShoulderPoleVector」(左肩極ベクトル)ヌル オブジェクトは「LeftWristIK」(左手首IK)IKハンドルの極ベクトル ターゲットであり、「LeftShoulderBox」(左肩)コントローラーの子になっています。そのため、「LeftShoulderBox」(左肩)コントローラーが回転すると、「LeftWristIK」(左手首IK)IKハンドルの極ベクトルが変化するためです。
「LeftWristBox」(左手首)コントローラーを回転させることで、手首の回転を操作できます。
これは、「LeftWrist」(左手首)ジョイントの回転が「LeftWristBox」(左手首)コントローラーに拘束されているためです。
このリグの仕組みによって、「手首」と「肩」の2つのコントローラーによって腕全体を簡単に操作することができます。
(sakura_rigged2_6.toy)