次の方法で共有


Unreal での手の追跡

ハンド トラッキング システムでは、人の手のひらと指が入力として使用されます。 すべての指の位置と回転、手のひら全体、手のジェスチャに関するデータを使用できます。 Unreal 4.26 以降、ハンド トラッキングは Unreal HeadMountedDisplay プラグインに基づいており、すべての XR プラットフォームとデバイスで共通の API が使用されます。 機能は、Windows Mixed Reality と OpenXR のどちらのシステムでも同じです。

手のポーズ

手のポーズを使用すると、ユーザーの手と指を入力として追跡して使用できます。これには、ブループリントと C++ の両方でアクセスできます。 Unreal API によってデータが座標系として送信され、ティックは Unreal Engine と同期されます。

ジョイント オーバーレイを使用した手のスケルトン画像手の骨格

階層は EHandKeypoint 列挙型によって記述されます。

手のキーポイント ブループリント オプションの画像

このデータはすべて、[モーション コントローラー データの取得] 関数を使用してユーザーの手から取得できます。 その関数からは XRMotionControllerData 構造体が返されます。 次に、XRMotionControllerData 構造体を解析して手の関節の位置を取得し、各関節の位置にデバッグ座標系を描画するブループリント スクリプトのサンプルを示します。

チャネル関数によってライン トレースに接続された [視線データの取得] 関数のブルーポイント

構造体が有効であるかどうかと、それが手であるかどうかを確認することが重要です。 そうしないと、位置、回転、半径配列へのアクセスで未定義の動作が発生する可能性があります。

手のポーズは、Live Link プラグインを使用してアニメーションに公開されます。

Windows Mixed Reality と Live Link プラグインが有効になっている場合:

  1. [ウィンドウ] > [Live Link] を選択して、Live Link エディター ウィンドウを開きます。
  2. [ソース] を選択して、[Windows Mixed Reality ハンド トラッキングのソース] を有効にします

Live Link ソース

ソースを有効にしてアニメーション資産を開いた後、[プレビュー シーン] タブの [アニメーション] セクションを展開すると、追加のオプションが表示されます。

Live Link アニメーション

手のアニメーション階層は、EWMRHandKeypoint の場合と同じです。 アニメーションのターゲットは WindowsMixedRealityHandTrackingLiveLinkRemapAsset を使用して変更できます。

Live Link アニメーション 2

エディターでサブクラス化することもできます。

Live Link 再マッピング

ハンド メッシュ

重要

ハンド メッシュには OpenXR が必要です。

Unreal マーケットプレ―スまたは GitHub から入手可能な Microsoft OpenXR プラグインを使用する必要があります。

追跡対象ジオメトリとしてのハンド メッシュ

重要

OpenXR でハンド メッシュを追跡対象ジオメトリとして取得するには、[有効にされた追跡ジオメトリ] を使用して [ハンド メッシュの使用を設定] を呼び出す必要があります。

このモードを有効にするには、[有効にされた追跡ジオメトリ] を使用して [ハンド メッシュの使用を設定] を呼び出す必要があります。

プレイ開始イベントが、有効にされた追跡ジオメトリ モードを使用した [ハンド メッシュの使用を設定] 関数に接続されたブループリント

Note

両方のモードを同時に有効にすることはできません。 1 つを有効にすると、もう一方は自動的に無効になります。

ハンド メッシュ データへのアクセス

ハンド メッシュ

ハンド メッシュ データにアクセスする前に、次のことを行う必要があります。

  • ARSessionConfig 資産を選択し、[AR 設定] -> [ワールド マッピング] 設定を展開し、[追跡対象ジオメトリからメッシュ データを生成する] をオンにします。

既定のメッシュ パラメーターを次に示します。

  1. オクルージョンにメッシュ データを使用する
  2. メッシュ データの衝突を生成する
  3. メッシュ データのナビゲーション メッシュを生成する
  4. ワイヤーフレームでのメッシュ データのレンダリング – 生成されたメッシュを示すデバッグ パラメーター

これらのパラメーター値は、空間マッピング メッシュとハンド メッシュの既定値として使用されます。 任意のメッシュのブループリントまたはコードで、いつでも変更できます。

C++ API リファレンス

追跡可能なすべてのオブジェクトのハンド メッシュ値を検索するには、EEARObjectClassification を使用します。

enum class EARObjectClassification : uint8
{
    // Other types
	HandMesh,
};

次のデリゲートは、ハンド メッシュを含む追跡可能なオブジェクトがシステムで検出されると呼び出されます。

class FARSupportInterface
{
    public:
    // Other params
	DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableAdded)
	DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableUpdated)
	DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableRemoved)
};

デリゲート ハンドラーでは次の関数シグネチャに従う必要があります。

void UARHandMeshComponent::OnTrackableAdded(UARTrackedGeometry* Added)

メッシュ データには、UARTrackedGeometry::GetUnderlyingMesh を使用してアクセスできます。

UMRMeshComponent* UARTrackedGeometry::GetUnderlyingMesh()

ブループリント API リファレンス

ブループリントでハンド メッシュを操作するには:

  1. ブループリント アクターに ARTrackableNotify コンポーネントを追加します

ARTrackable Notify

  1. [詳細] パネルに移動し、[イベント] セクションを展開します。

ARTrackable Notify 2

  1. イベント グラフ内の次のノードで、追加/更新/削除時の追跡対象ジオメトリを上書きします。

On ARTrackable Notify

OpenXR でのハンド メッシュの視覚化

ハンド メッシュを視覚化する場合は、Epic の XRVisualization プラグインを Microsoft OpenXR プラグインと共に使用する方法をお勧めします。

次に、ブループリント エディターで、パラメーターとして [有効にされた XRVisualization] を使用して Microsoft OpenXR プラグイン[ハンド メッシュの使用を設定] 関数を使用する必要があります。

プレイ開始イベントが、有効にされた XRVisualization モードを使用した [ハンド メッシュの使用を設定] 関数に接続されたブループリント

レンダリング プロセスを管理するには、XRVisualization から [モーション コントローラーのレンダリング] を使用する必要があります。

[モーション コントローラーのデータの取得] 関数が、[モーション コントローラーのレンダリング] 関数に接続されたブループリント

結果は次のようになります。

実際の人の手の上にオーバーレイされたデジタルの手の画像

カスタム シェーダーを使用したハンド メッシュの描画などのより複雑な操作が必要な場合は、メッシュを追跡対象ジオメトリとして取得する必要があります。

ハンド レイ

手のポーズの取得は、オブジェクトをつかんだりボタンを押したりするような密接な対話式操作で機能します。 ただし、ユーザーから離れたところにあるホログラムを操作する必要がある場合があります。 これは、C++ とブループリントの両方でポインティング デバイスとして使用できるハンド レイで実現できます。 手から遠くの地点への光線を描画し、Unreal レイ トレースを利用すると、手の届かないホログラムを選択できます。

重要

すべての関数の結果はフレームごとに変わるので、それらはすべて呼び出し可能になります。 純粋関数と非純粋関数または呼び出し可能関数の詳細については、ブループリントのユーザー ガイドで「関数」を参照してください。

ハンド レイのデータを取得するには、前のセクションの [モーション コントローラー データの取得] 関数を使用する必要があります。 返される構造体には、ハンド レイの作成に使用できる 2 つのパラメーター [目標の位置][目標の回転] が含まれています。 これらのパラメーターでは、肘で指示された光線を形成します。 これらを使用して、指されているホログラムを見つける必要があります。

次に、ハンド レイがウィジェットにヒットするかどうかを判断し、カスタム ヒット結果を設定する例を示します。

[モーション コントローラーのデータの取得] 関数のブループリント

手ぶり

HoloLens 2 では空間ジェスチャを追跡します。つまり、これらのジェスチャを入力としてキャプチャできます。 ジェスチャの追跡は、サブスクリプション モデルに基づいています。 [ジェスチャの構成] 関数を使用して、追跡するジェスチャをデバイスに指示する必要があります。ジェスチャの詳細については、HoloLens 2 の基本的な使用方法に関するドキュメントを参照してください。

Windows Mixed Reality

プレイ開始イベントが [ジェスチャの構成] 関数に接続されたブループリント

次に、次のイベントをサブスクライブするためのコードを追加する必要があります。

Windows 空間入力のホールド、タップ、および左の操作ジェスチャのブループリント詳細パネルの Windows 空間入力タップ ジェスチャ オプションのスクリーンショット

OpenXR

OpenXR では、ジェスチャ イベントは入力パイプラインを使用して追跡されます。 ハンド対話を使用すると、デバイスでは長押しジェスチャを自動的に認識できますが、他は認識しません。 OpenXRMsftHandInteraction [選択] および [つかむ] マッピングという名前です。 サブスクリプションを有効にする必要はありません。次のように、[プロジェクト設定]/[エンジン]/[入力] でイベントを宣言する必要があります。

OpenXR アクション マッピングのスクリーンショット

次の開発チェックポイント

用意されている Unreal 開発体験に従っている場合、MRTK コア構成要素を探索している段階にいます。 ここから、次の構成要素を続けることができます。

または、Mixed Reality プラットフォームの機能と API に移動します。

いつでも Unreal 開発チェックポイントに戻ることができます。