本日は MetaQuestPro の小ネタ枠です。
Unity-MovementのHip Pinning Sampleの仕組みを確認して記事にします。
前回記事
以下の前回記事の続きです。
bluebirdofoz.hatenablog.com
本記事では以下のHip Pinning Sampleの解説ページを参考にサンプルシーンを確認します。
Movement Hip Pinning Sample: Unity | Oculus Developers
Hip Pinning Sampleを試す
Hip Pinning Sampleを試すには以下のサンプルシーンを利用します。
・Packages/MetaMoveMent/Samples/HighFidelity/Hip Pinning/Scenes/MovementHipPinning.unity
Packages フォルダ配下は書き込み不可の領域のため、そのままではシーンを開けません。
一旦、これらのサンプルシーンを Assets フォルダ配下にドラッグしてコピーます。
サンプルを動作させるにはボディ/アイ/フェイストラッキングの権限設定を行う必要があります。
Hierarchy から InteractionRigOVR-Basic/OVRCameraRig を選択して Inspector ビューを開きます。
[OVRManager]コンポーネントで以下の通り設定を行います。
・[Quest Features -> Hand Tracking Support]に[Controllers And Hands]を設定する
・[Quest Features -> Body Tracking Support]に[Required]を設定する
・[Quest Features -> Face Tracking Support]に[Required]を設定する
・[Quest Features -> Eye Tracking Support]に[Required]を設定する
・[Permission Requests On Startup -> Body Tracking]にチェックを入れる
・[Permission Requests On Startup -> Face Tracking]にチェックを入れる
・[Permission Requests On Startup -> Eye Tracking]にチェックを入れる
シーンの概要
このシーンを再生すると目の前に椅子に座ったリアルな人型のキャラクターが現れます。
ユーザーは自分の顔の感情と視線をリアルタイムでキャラクターに反映したアニメーションを確認することができます。
キャラクターの腰はシーン内の椅子に固定されています。
シーンの椅子の高さをユーザーの椅子の高さにキャリブレーションし、椅子の高さの調整で下半身を床に接地させるヘルパースクリプトがあります。
シーンの詳細
1.
InteractionRigOVR-Basic -> OVRCameraRig -> HighFidelityHipPinningFirstPerson の下に、ユーザーの動きを追跡するミラーリングされていないキャラクターが存在します。
ミラーリングされたキャラクターは InteractionRigOVR-Basic -> OVRCameraRig -> MirroredObjects の下にあります。
2.
メインのディレクションライトはミラーリングされていないキャラクターに作用します。
MirroredObjects の下にあるディレクションライトはミラーリングされたキャラクターに作用します。
3.
一般に、すべてのミラーリングオブジェクトは InteractionRigOVR-Basic -> OVRCameraRig -> MirroredObjects ゲームオブジェクトの下に存在します。
4.
スポットライトはベイクド・ライティングによってプロップに影響を与えます。
5.
ミラーリングされていないキャラクターの HipPinningLogic の腰の位置のターゲットとして、HipPinningChair オブジェクトがあります。
ミラーリングされたキャラクターの HipPinningLogic には HipPinningChairDuplicate というオブジェクトが使用されます。
ミラーキャラクターの詳細
このシーンは Packages/Meta Movement/Samples/HighFidelity/HipPinning/Scenes/MovementHipPinning.unity に存在します。
一人称のキャラクターは Packages/Meta Movement/Samples/HighFidelity/HipPinning/Prefabs/HighFidelityHipPinning.prefab です。
三人称のキャラクターは同じフォルダ内の HighFidelityHipPinningMirrored.prefab です。
キャラクターのプレハブのモデルは Packages/Meta Movement/Samples/HighFidelity/HipPinning/Models/high_fidelity_rig_sitting.fb を参照します。
そのマテリアルは Packages/Meta Movement/Samples/HighFidelity/HipPinning/Materials に存在しています。
コンポーネントの解説
各コンポーネントの機能に関する詳細を記載します。
以下のリストはキャラクターに設定された各コンポーネントの基本情報です。
1.OVRBody
ボディ・トラッキングの機能を提供します。
2.OVRCustomSkeleton
ボディ・トラッキングで BoneId 列挙型を対応するボーンのトランスフォームにマッピングするために使用されます。
このマッピングは手動または "Auto Map Bones" ボタンで行うことができます。
5.CorrectiveShapesDriver
ブレンドシェイプ用の修正スクリプトです。
ここで使われる修正ファイルは Packages/Meta Movement/Samples/HighFidelity/Character/CombinationShapes/HighFidelityCombinationShapes.json に存在します。
6.EyeRigLogic
視線方向に基づいて視線を駆動します。
7.RecalculateNormals
メッシュがアニメートするときに法線を再計算します。
8.HipPinningLogic
キャラクタのヒップがヒップピンニング位置のターゲットに固定されるように更新し、ボディ全体をヒップピンニング位置にオフセットします。
9.GroundingLogic
キャラクタの足が接地されるように更新されます。
ヒップピンニング位置のセットアップ詳細
キャラクターはヒップピンニングロジックのためにボディトラッキングを設定する必要があります。
HipPinningLogic コンポーネントには、入力しなければならないフィールドがいくつかあります。
OVRSkeleton/OVRSkeletonDataProvider
ボディトラッキングデータを取得するために必要です。
Hip Pinning Targets(ヒップピニングターゲット)
少なくとも 1 つのヒップ ピンニング ターゲット(このキャラクターがピン留めされるターゲット)が必要です。
Body Joints
ボディジョイントが少なくとも 1 つ存在する必要があります。
これらのフィールドを設定したら、次にジョイントを割り当てる必要があります。
必要な数のボディジョイントを割り当てた後、[Assign Missing Joints]をクリックして、不足しているジョイントをフィールドに自動的に割り当てます。
次に[Initialize Hip Pinning]をクリックして、利用可能なヒップターゲットに基づいて制約を自動的に作成して割り当てます。
その後、[Save Hip Pinning Offsets]をクリックしてオフセットを保存し、[Deactivate Hip Pinning]をクリックして、必要に応じて制約をオフにします。
ヒップピンの高さをキャリブレーションして実際のユーザーのヒップの高さが同じになるようにすることをお勧めします。
ヘルパースクリプト HipPinningCalibration には、これをどのように行うかのサンプルがあります。
接地の設定詳細
キャラクターには接地ロジック用に2つの TwoBoneIK コンポーネントが必要です(各脚に1つずつ)。
GroundingLogic コンポーネントには、入力しなければならないフィールドがいくつかあります。
Skeleton
ボディトラッキングデータを取得するために必要です。
Left Leg/Right Leg
各脚の TwoBoneIK コンポーネントです。
Hips Target(ヒップターゲット)
足を前方に向けるために使用される腰のターゲットです。
Ground Layers(グランドレイヤー)
レイキャストチェックに使用されるグランドレイヤーです。
GroundingLogic が足を動かし TwoBoneIK コンポーネントが足のターゲットに向かって下半身を移動させるアニメーションを担当します。