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. 選取 [視窗 > 即時連結 ] 以開啟 [即時連結編輯器] 視窗。
  2. 選取[來源],然後啟用Windows Mixed Reality手部追蹤來源

即時連結來源

啟用來源並開啟動畫資產之後,請展開[預覽場景] 索引標籤中的 [動畫] 區段,也會看到其他選項。

即時連結動畫

手部動畫階層與 中的 EWMRHandKeypoint 相同。 動畫可以使用 WindowsMixedRealityHandTrackingLiveLinkRemapAsset來重新設定目標:

即時連結動畫 2

它也可以在編輯器中子類別化:

Live Link Remap

手部網格

重要

手部網格需要 OpenXR。

您必須使用 Microsoft OpenXR 外掛程式,才能從 Unreal MarketplaceGitHub取得。

手部網格做為追蹤幾何

重要

在 OpenXR 中以追蹤幾何的形式取得手網格需要您呼叫 設定使用手部網格 搭配 已啟用追蹤幾何

若要啟用該模式,您應該呼叫 [設定使用手部網格 搭配 已啟用追蹤幾何]:

事件藍圖開始播放連線以設定使用手部網格函式與已啟用追蹤幾何模式

注意

這兩種模式都無法同時啟用。 如果您啟用其中一個,則會自動停用另一個。

存取手部網格資料

手部網格

在您可以存取手部網格資料之前,您必須:

  • 選取您的 ARSessionConfig 資產,展開 [ AR 設定 - > 世界對應 ] 設定,然後核取 [從追蹤幾何產生網格資料]。

以下是預設網格參數:

  1. 使用網格資料進行遮蔽
  2. 產生網格資料的衝突
  3. 產生網格資料的導覽網格
  4. 在 Wireframe 中轉譯網格資料 - 顯示所產生網格的偵錯參數

這些參數值會當做空間對應網格和手部網格預設值使用。 您可以在藍圖或任何網格的程式碼中隨時變更它們。

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. 在 [新增/更新/移除追蹤幾何] 上覆寫事件圖形中的下列節點:

在 ARTrackable Notify 上

OpenXR 中的手部網格視覺效果

視覺化手網格的建議方式是搭配 Microsoft OpenXR 外掛程式使用 Epic 的 XRVisualization 外掛程式。

然後在藍圖編輯器中,您應該使用 Microsoft OpenXR 外掛程式中的Set Use Hand Mesh函式搭配Enabled XRVisualization做為參數:

事件開始播放的藍圖,以設定已啟用 xrvisualization 模式的手部網格函式

若要管理轉譯程式,您應該使用 XRVisualization 的 轉譯動作控制器

連線到轉譯動作控制器函式的動作控制器資料函式藍圖

結果:

真實人類手部重迭的數位手部影像

如果您需要更複雜的專案,例如使用自訂著色器繪製手部網格,您需要取得網格做為追蹤幾何。

手部光線 (Hand Ray)

取得手部姿勢適用于關閉互動,例如抓取物件或按下按鈕。 不過,有時候您需要使用離使用者遠的全像投影。 這可以使用手部光線來完成,這可用於 C++ 和藍圖中的指向裝置。 您可以從手部繪製光線到遠點,並透過 Unreal 光線追蹤的一些協助,選取不達的全像投影。

重要

由於所有函式都會變更每個畫面格,因此所有函式都會變成可呼叫。 如需純函式和不精確或可呼叫函式的詳細資訊,請參閱藍圖使用者 guid on 式。

若要取得手部光線的資料,您應該使用上一節的取得動作控制器資料函式。 傳回的結構包含兩個參數,可用來建立手部光線 – Aim PositionAim Rotation。 這些參數會形成由您的手部導向的光線。 您應該加以擷取,並找出所指向的全像投影。

以下是判斷手部光線是否叫用小工具,以及設定自訂點擊結果的範例:

取得動作控制器資料函式的藍圖

軌跡

HoloLens 2追蹤空間手勢,這表示您可以將這些手勢擷取為輸入。 手勢追蹤是以訂用帳戶模型為基礎。 您應該使用「設定手勢」函式來告知裝置您想要追蹤的手勢。如需手勢的詳細資訊,請參閱HoloLens 2基本使用方式檔。

Windows Mixed Reality

事件開始播放的藍圖,以設定手勢函式

然後,您應該新增程式碼來訂閱下列事件:

Windows 空間輸入保留、點選和左側操作手勢的藍圖詳細資料面板中 Windows 空間輸入點選手勢選項的螢幕快照

OpenXR

在 OpenXR 中,手勢事件會透過輸入管線追蹤。 使用手部互動,裝置可以自動辨識點選和按住手勢,但無法辨識其他手勢。 它們會命名為 OpenXRMsftHandInteraction Select 和 Grip 對應。 您不需要啟用訂用帳戶,您應該在 [專案設定]/[引擎/輸入] 中宣告事件,如下所示:

OpenXR 動作對應的螢幕擷取畫面

下一個開發檢查點

依循我們配置的 Unreal 開發旅程,此時您會探索 MRTK核心建置組塊。 接下來,您可以繼續進行下一個建置組塊:

或者,直接跳到混合實境平台功能和 API 的主題:

您可以隨時回到 Unreal 開發檢查點