Unreal用Movementのサンプル
更新日時: 2024/09/04
このセクションを完了すると、以下のことができるようになります。
- 提供されたサンプルのコンテクストを理解する。
- サンプルを操作して、プロジェクトに適用できるサンプルコードを見つける。
Unreal用のMovementのサンプルは4つのシーンで構成されており、それぞれ少し異なる使用例を示しています。最初の2つは古いアクターコンポーネントメソッドで実装され、後の2つはアニメーションノードメソッド(好ましい)を使っています。シーンは「Content/Maps」フォルダーにあります。
フェイス(「オーラ」): (“MAP_Aura”) アクターコンポーネントメソッドを使ったフェイストラッキングとアイトラッキングの活用方法を示すフェイストラッキングシーンです。
上半身: (“MAP_HighFidelity”) ボディトラッキング、フェイストラッキング、アイトラッキングが実装されたリアルなキャラクターです。このシーンはOculusリグをそのまま使っており、Unrealのマネキンとの互換性はありません。
リターゲティング - マネキン: (“MAP_RetargetMannequinAnimBlueprint”) このシーンでは、マネキンとアニメーションノードメソッドを使ったリターゲティングオプションを示しています。このサンプルで使われる技術はほかのリグにも使うことができます。これはボディトラッキングの最も完全な例です。
フェイス、アイ、ボディのリターゲティング: (“MAP_HighFidelity_AnimBlueprint”) このサンプルでは、アニメーションノードメソッドを使って、リアルなキャラクターモデルにボディ、フェイス、アイのトラッキングを適用しています。
上記のシーンを切り替えるためのシーンセレクトメニューは、以下のとおりです。
このセクションで説明したように、すべてのサンプルは共通のコンポーネントを使います。
- メインのポーン これは、VRに入るときに所有するポーンです。カメラはこのコンポーネントに取り付けられており、一人称の映像を表示します。
- ミラーリングされたポーン これはメインのポーンと同じですが、X軸全体のミラーリングを実現するために(-1, 1)にスケールされ、カメラコンポーネントは持っていません。これは、Oculusのポーンが外部からの視点、つまり三人称視点での位置づけでどのように見えるかを示すポーンです。
- シーンハンドラー 環境を設定し、メインアバターを管理するために使われ、レベル切り替えのロジックを含んでいます。
レベル間を切り替えるには、上の図に示したScene Swtich UIを使うができます。
- コントローラーの使用: UIのボタンを指し、右コントローラーの
A ボタンを押して選択します。 - ハンドトラッキングの使用: UIのボタンを指し、親指と人差し指のピンチ操作で選択します。
オーラ - フェイストラッキングとアイトラッキング
このサンプルは、Movement SDKのフェイストラッキングとアイトラッキングの機能を示しています。オーラは、通常よりも大きな目や花びらのような髪など、少しスタイリッシュで幻想的な特徴を持つようにモデル化されたキャラクターです。オーラの比率は人間と少し異なるため、フェイストラッキングデータはキャラクターに合わせて調整する必要があり、動かしたりアニメ化する際にキャラクターが自分の形状を切り取ってしまわないように制約する必要があります。これは、フェイスデータがキャラクターにどのように適用されるかについて制約を設定し、表情モディファイアを使って実現します。オーラには自由に浮遊する頭と手がある、つまり考慮するべき肘や膝がないため、3ポイントのボディトラッキング(頭と手2つ)を適用すると納得のいく結果が生まれます。
オーラはアクターコンポーネントの実装を使ってリターゲティングされます。マップを開いてポーンを調べると、以下のコンポーネントがオーラに追加されていることがわかります。
- OculusXRFaceTrackingは、モーフターゲットを駆動するフェイストラッキングトリガーを実装します。
- OculusXRBodyTrackingは、手を動かすボディトラッキングを実装します。
- OculusXRBodyTrackingはアイトラッキングインターフェイスを実装します。
さらに以下のコンポーネントも持っています。
- AC_BoneHideは、表示されるべきではない骨格を隠します。
- OculusXRFaceTrackingCorrectivesは、舌のトラッキングのサポートを追加します。
これらはさまざまな方法でトラッキングを改善するコンポーネントです。これらはサンプル内にあり、同様の機能を実現するためのインスピレーションとして利用することも、自分のプロジェクトに移行することもできます。
さまざまなキャラクターの顔が必ずしも実際の顔と正しく一致するとは限らないため、表情モディファイアが必要になります。顔のモーフターゲットは、完全に無効にするか、実際の顔による効果を増減することによって変更できます。例えば、オーラキャラクターが笑うと、唇が歯の後ろに隠れてしまいますが、唇のモディファイアを使って修正できます。
表情モディファイアは、フェイストラッキングコンポーネントで有効になります。表情モディファイアは33個の要素を配列したものです。
以下に個々の要素を示します。
- 表情 一度に複数の表情(可能であれば顔の左側と右側の2つ)をターゲティングする配列です。
- 最小値 モーフターゲットの最小値を含みます。
- 最大値 モーフターゲットの最大値を含みます。
- 乗数 モーフターゲットの効果を増減するために使います。
このサンプルでは、半身キャラクターのMovement SDKの使い方を紹介します。これは3Dスキャンされたキャラクターで、現実的な比率を持っています。これは、トラッキングデータを直接キャラクターに適用できるということです。腕が不自然な方法でねじれないようにするために、Twist Distributionを腕に適用する必要があることにご注意ください。
このモデルは、以下の機能を使ってアクターコンポーネントを実装することで設定されています。
- OculusXRFaceTrackingは、モーフターゲットを駆動するフェイストラッキングトリガーを実装します。
- OculusXRBodyTrackingは、手を動かすボディトラッキングを実装します。
- OculusXRBodyTrackingはアイトラッキングインターフェイスを実装します。
さらに以下のコンポーネントも持っています。
- AC_InverseKinematicは、肘の位置を変えるために使われます。
- AC_TwistDistributionは、手首がねじれて表示されないようにひねりを与えます。
Animation Blueprintをリターゲットする - マネキン
このサンプルでは、
OculusXRMovementボディトラッキングアニメーションノードを使って、Unreal 5マネキンリグにボディトラッキングを適用しています。Unrealマネキンの骨格はOculusボディトラッキングの骨格とは異なるため、トラッキング骨格名をターゲット骨格の骨にマッピングするにはボーンマップが必要です。
OculusXRMovementボディトラッキングノードは、
上半身と
全身のトラッキングをサポートしています。側面のUIパネルで、実行時に2つのモードから選択できます。サンプルが上半身のトラッキングを使っている場合、足に関する情報はありません。その代わり、フットグラウンディングが足を床に固定します。このプロセスでは、地面までトレースを走らせ、IKを使って自然に見えるように足をそこに配置します。

マネキンは、以下の機能を使ってAnimation Blueprintを実装することで設定されています。
- OculusXRBodyTrackingノードは、アニメーションノードメソッドでボディトラッキングを実装しています。
さらに、このキャラクターは以下のコンポーネントも持っています。
- OculusXRBodyTrackingは、地面までトレースし、接地可能な足の位置を見つける役割を果たします。
- AC_FBSCheckerは、全身モードがアクティブかどうかをチェックします。
このサンプルは、このサンプルにボディトラッキング、フェイストラッキング、アイトラッキング(つまりフルトラッキング)を適用することを示しています。先ほど紹介したサンプルと比較して、この例はボディトラッキング、フェイストラッキング、アイトラッキングのアニメーションノードの実装を使っています。
このモデルは、以下の機能を使ってAnimation Blueprintを実装することで設定されています。
- OculusXRFaceTrackingは、モーフターゲットを駆動するフェイストラッキングトリガーを実装します。
- OculusXRBodyTrackingは、手を動かすボディトラッキングを実装します。
- OculusXRBodyTrackingはアイトラッキングインターフェイスを実装します。
さらに、このサンプルには以下のコンポーネントがあります。
- OculusXRBodyTrackingは、地面までトレースし、接地可能な足の位置を見つける役割を果たします。
- AC_FBSCheckerは、全身モードが使われているかどうかをチェックします。
このセクションでは、サンプルプロジェクトのすべてのBlueprintの概要と、それらの目的を説明します。
| 名前 | 目的 | パス |
|---|
AC_BoneHide | 骨格を隠すために使われるアクターコンポーネント。半身のサンプルに使われています。 | Blueprints/AC_BoneHide
|
AC_AndroidPermissions | Androidでのアクセス許可のリクエストに使われるヘルパーコンポーネント。 | Blueprints/AC_AndroidPermissions
|
AC_DeformationLogic | キャラクターの本体を変形させるために使われるアクターコンポーネント。 | Blueprints/Deformation/AC_DeformationLogic
|
AC_DriveSkeletalUpdateLogic | 骨格更新ロジックを実行するために使われるアクターコンポーネント。 | Blueprints/AC_DriveSkeletalUpdateLogic
|
AC_TwistDistribution | 関節のねじれを分散するために使われるアクターコンポーネント。 | Blueprints/TwistDistribution/AC_TwistDistribution
|
BP_AuraOculusPawn | オーラキャラクター用のOculusポーン。 | Blueprints/Avatars/BP_AuraOculusPawn
|
BP_AxisGixmo | 関節の向きを示すために使われるギズモ。 | Blueprints/Debug/BP_AxisGizmo
|
BP_MovementSampleGameMode | サンプル用のゲームモード。いくつかのレンダリングコマンドの設定と関連するパーミッションのリクエストを行います | Blueprints/BP_MovementSampleGameMode
|
BP_OculusPawn | MetaXRプラグインのベースOculusポーン | Blueprints/Avatars/BP_OculusPawn
|
BP_Printer | アクターは、ワールドスペースのスクリーンにデバッグ情報をプリントするために使われます。 | Blueprints/Debug/BP_Printer
|
BP_SceneHandler | アクターは環境を設定するために使われ、メインアバターを所有します。各サンプルレベルでこれらのうち1つ。 | Blueprints/BP_SceneHandler
|
WBP_BodyTrackingSettings | ボディトラッキングの設定を表示するために使われるウィジェット。 | Blueprints/Widgets/WBP_BodyTrackingSettings
|
WBP_LevelSwitch | レベル間を切り替えるために使われるウィジェット。 | Blueprints/Widgets/WBP_LevelSwitch
|
WBP_Recalibrate | ボディトラッキングの高さの再キャリブレーションをトリガーするために使われるウィジェット | Blueprints/Widgets/WBP_Recalibrate
|
WBP_SkeletonDebugSettings | ボディトラッキング骨格のさまざまなデバッグ表示を有効または無効にするために使われるウィジェット。 | Blueprints/Widgets/WBP_SkeletonDebugSettings
|
Twist distribution - Blueprint
骨/関節を正しく回転させ、体の各部分がキャンディーの包み紙のようにねじれて見えないようにするために関節を調整するTwist Distributionコンポーネントがあります。(アニメーションノード実装を使う場合は不要です。)この現象は手を回転させると確認できます。肘の骨と手首の骨は回転していますが、関節の回転が正しく分散されておらず、キャンディーの包み紙のような外観になっています。
twist distributionなし
twist distributionあり
プロパティ
- ウェイト: ねじれによる効果の程度。
- セグメント開始: ねじれが発生した場所の反対側の開始ボーン。
- セグメント終了: ねじれを含むターゲットボーン。
- セグメント終了: 任意。セグメント終了ベクトルとして使う別のボーンを割り当てます。
- ツイストジョイント: ソースの回転の影響を受けるツイストジョイントのリスト。重みはさまざまな分散に使われます。
- ツイスト前方軸: ツイストジョイントの前方軸。ねじれ軸に沿ってセグメントの端を指します。
- ツイスト上方軸: ツイストジョイントの上方軸。セグメントの端の上方軸と一致します。
シミュレーションされたボディの脊椎と腕の骨の間隔が、ボディの状態の更新後に変化する場合があります。元の間隔が開始時に記録され、ボディの状態の更新後に間隔を修正するために使われます。Deformation Logicコンポーネントはこの間隔を調整します。特定の理由のために頭や腰をスキップするオプションがあります。
プロパティ
- ウェイト: 上腕の骨に対する下腕の骨の位置を変更するために使われます。
- 移動速度: Move Towardsを使う場合に、手が瞬時ではなくスムーズに再配置されます。

プロジェクトでAC_AndroidPermissionsを使って、デバイスへのアクセス許可をリクエストすることができます。
- Movement SDKのサンプルで、[Content (コンテンツ)] > [Blueprints] > [AC_AndroidPermissions]に移動し、これをプロジェクトに移行します。これを行うには、アセットを右クリックし、[Asset Actions (アセットアクション)] > [Migrate (移行)]を選び、これをプロジェクトに移動します。
- プロジェクトで、GameModeにAC_AndroidPermissionsをコンポーネントとして追加します。
- GameModeのBeginPlay中に、コンポーネントのRequestPermissionsメソッドを呼び出して、関連するアクセス許可をリクエストする必要があります。
BP_MovementSampleGameModeをご覧いただければ、この設定方法を確認できます。