見出し画像

VRアバターを作ってみる ( リギング編 )

前回は、VRアバターとなるモデルと実際に動かした時に確認できる鏡の用意までしました。今回は、モデルに対して腕や頭を動かす仕組み(リギング)を設定します。
リギングにはAnimation Riggingを使用し、設定に従って動作する事を確認します。

環境

Unityバージョン:2021.1.21f1
XR Interaction Toolkit:1.0.0-pre.6
Animation Rigging:1.0.3
Oculus Quest2:v32 ソフトウェア

モデルの設定

モデルを動かすための設定を行います。作業しやすいようにボーンを表示し、動かすために必要なオブジェクトを準備します。

■ボーンの表示
モデルに設定されている骨組み(ボーン)を視覚化します。
HierarchyビューのRobot Kyleを選択し、メニューからBone Renderer Setup( Animation Rigging > Bone Renderer Setup )を選択します。
Sceneビュー上のモデルにボーンが表示されます。

画像1

■リグの作成
モデルを動かすために必要な仕組みを保持するオブジェクトを作成します。
HierarchyビューのRobot Kyleを選択し、メニューからRig Setup( Animation Rigging > Rig Setup )を選択します。
HierarchyビューのRobot Kyleの配下にRig1が作成されます。

画像2

腕のリギング

腕をハンドコントローラーの動きに追従させて動くように腕に対するIK用オブジェクトを作成します。ここでは、右腕に対して作成していますが、左腕も同様に作成します。
腕のIK用オブジェクトは、二つのボーンに対する動きを制御するコンポーネント「Two Bone IK Constraint」を使用します。
このコンポーネントは、ボーンから動きの元(Root)と関節(Mid)と末端(Tip)を設定し、目標(Target)とヒント(Hit)を指定する事で末端が目標に追従するようにボーンを制御出来ます。ヒントは、関節を曲げる方向を制御します。

■IK用オブジェクトの作成
リグの配下に右腕用のIK用オブジェクトを作成し、Two Bone IK Constraintコンポーネントを追加します。
HierarchyビューのRobot Kyle > Rig1を選択し、右クリックして表示されるコンテキストメニューからCreate Emptyを選択します。Rig1の配下にGameObjectが作成されるので、名前を「IK_Hand_R」に変更します。
作成したIK_Hand_Rを選択し、Inspectorビューの「Add Component」からTwo Bone IK Constraintコンポーネントを追加します。

画像3

■Two Bone IK Constraintコンポーネントの設定
Two Bone IK Constraintコンポーネントに腕のボーンを設定します。手のボーンをTipに設定し、「Auto Setup from Tip Transform」を使用する事で、必要なオブジェクトが作成及び設定されます。
IK_Hand_RのInspectorビューを右上の鍵アイコンをクリックしてロックします。ロックする事により、Hierarchyビューで何らかのオブジェクトをクリックしてもInspectorビューの内容が切り替わらなくなります。
Hierarchyビューからモデルの右手のボーン( Robot Kyle > Root > Ribs > Right_Shoulder_Joint_01 > Right_Upper_Arm_Joint_01 > Right_Forearm_Joint_01 > Right_Wrist_Joint_01 )をTwo Bone IK ConstraintコンポーネントのTipに設定します。

画像4

Two Bone IK Constraintコンポーネントのタイトルを右クリックして表示されるコンテキストメニューより、Auto Setup from Tip Transformを選択します。Two Bone IK ConstraintコンポーネントのMid、Root、Source Objectsが設定され、HierarchyビューのIK_Hand_Rの配下にIK_Hand_R_target、IK_Hand_R_hintが作成されます。

画像5

■目標(Target)の設定
Two Bone IK Constraintコンポーネントは、末端(Tip)に設定したボーンを目標(Target)に設定したオブジェクトに追従するように動かします。TargetとTipを同じ位置にする事により、Targetに設定したオブジェクトとハンドコントローラーを同期させて動かす事で、手のボーンがハンドコントローラーの動きに追従するようになります。
Hierarchyビューから右手のTarget( Robot Kyle > Rig1 > IK_Hand_R > IK_Hand_R_target )とモデルの右手のボーン( Robot Kyle > Root > Ribs > Right_Shoulder_Joint_01 > Right_Upper_Arm_Joint_01 > Right_Forearm_Joint_01 > Right_Wrist_Joint_01 )を選択した状態で、メニューのAlign Transform( Animation Rigging > Align Transform )を選択すると、右手のTargetの位置がモデルの右手のボーンの位置と一致します。

画像6

■ヒント(Hint)の設定
ヒント(Hint)は、二つのボーンの中間にある関節(Mid)を曲げる方向を制御します。Hintが設定されていると、MidはHintの位置に近づくように曲がります。Hintが設定されていないとMidが意図しない方向に曲がるなど不自然な動きとなります。
Hierarchyビューから右手のHint( Robot Kyle > Rig1 > IK_Hand_R > IK_Hand_R_hint )とモデルの右肘のボーン( Robot Kyle > Root > Ribs > Right_Shoulder_Joint_01 > Right_Upper_Arm_Joint_01 > Right_Forearm_Joint_01 )を選択した状態で、メニューのAlign Transform( Animation Rigging > Align Transform )を選択すると、右手のHintの位置がモデルの右肘のボーンの位置と一致します。

画像7

Hierarchyビューから右手のHint( Robot Kyle > Rig1 > IK_Hand_R > IK_Hand_R_hint )を選択し、Sceneビューで肘の少し後ろ側に移動します。(目視で適当に)

画像8

頭のリギング

頭をVRヘッドセットの動きに追従させて動かすように、頭に対してIK用オブジェクトを作成します。
頭用のIKオブジェクトには、「Multi-Parent Constraint」コンポーネントを使用し、頭のボーンと目標(Target)を設定し、頭のボーンを目標に追従するようにします。

■IK用オブジェクトの作成
リグの配下に頭のIK用オブジェクトを作成し、Multi-Parent Constraintコンポーネントを追加します。
HierarchyビューのRobot Kyle > Rig1を選択し、右クリックして表示されるコンテキストメニューからCreate Emptyを選択します。Rig1の配下にGameObjectが作成されるので、名前を「IK_Head」に変更します。
作成したIK_Headを選択し、Inspectorビューの「Add Component」からMulti-Parent Constraintコンポーネントを追加します。

画像10

■Multi-Parent Constraintコンポーネントの設定
Multi-Parent Constraintコンポーネントは、Constrained Objectに設定したオブジェクトをSource Objectsに設定したオブジェクトの子のように動かします。
Constrained Objectにモデルの頭のボーンを設定します。
IK_HeadのInspectorビューを右上の鍵アイコンをクリックしてロックします。Hierarchyビューからモデルの頭のボーン( Robot Kyle > Root > Ribs > Neck > Head )をMulti-Parent ConstraintコンポーネントのConstrained Objectに設定します。

画像11

■目標(Target)の設定
頭のボーンを制御する目標(Target)を作成し、Multi-Parent ConstraintコンポーネントのSource Objectsに設定する事で頭の動きを制御します。
Targetと頭のボーンを同じ位置に設定し、TargetとVRヘッドセットを同期させて動かす事で、頭のボーンがVRヘッドセットの動きに追従するようになります。
HierarchyビューからRobot Kyle > Rig1 > IK_Headを選択し、右クリックして表示されるコンテキストメニューからCreate Emptyを選択します。IK_Headの配下にGameObjectが作成されるので、名前を「IK_Head_target」に変更します。
作成したIK_Head_targetをMulti-Parent ConstraintコンポーネントのSource Objectsに設定します。

画像13

IK_Head_targetとモデルの頭のボーン(Robot Kyle > Root > Ribs > Neck > Head)を選択した状態で、メニューのAlign Transform( Animation Rigging > Align Transform )を選択すると、IK_Head_targetの位置がモデルの頭のボーンの位置と一致します。

画像13

実行

左腕も右腕同様に設定を行い、実行ボタンより実行します。
Hierarchyビューで右手のTargetを選択し、Sceneビューで位置を変更すると、Gameビューの中で肩から先の腕全体が、Targetに従うように動きます。肘が曲がったり、伸びたりと人体の動きと同じように動く事が確認できます。

画像13

参考

■公式マニュアル
Two Bone IK
Multi-Parent Constraint

終わりに

今回は、モデルにリギングの設定を行いリギングの確認まで行いました。次回は、VR用の設定、スクリプトの作成を行い、VRヘッドセットとハンドコントローラーの動きに追従するよう設定し、実機にて動作を確認します。

将来の自分への備忘録、ついでに誰かの何かのきっかけになれば幸いです。

この記事が気に入ったらサポートをしてみませんか?