Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

節點與術語

手部追蹤是追蹤玩家手的位置和方向(包括玩家手指的方向)的過程。我們可以將其分為 3 類:

一,透過相機等外部感光元件進行手部追蹤。 Hololens、Quest、UltraLeap 和類似裝置就是這麼做的。這通常會導致非常準確地追蹤玩家手上的所有手指。

第二,透過 VR 手套進行手部追蹤。這種方法仍處於實驗階段,但可能很快就會流行起來。手套通常具有良好的手指追蹤功能,但其真正的賣點是限制運動的能力。這允許觸摸的感覺。手套通常也被認為是控制器,並且通常會有附加的控件,例如嵌入的按鈕。

Three, inferred hand tracking. This has been the de facto approach since the early days of VR. As we know the player is holding a controller and we know the position of this controller, we can infer where to render the players hand. Fingers can be positioned based on the controls the player is interacting with. Many modern VR controllers have additional sensors to help determine finger positions on the controller.

備註

傳統上推斷手部追蹤一直是遊戲的責任。然而,行動地圖背後的原則在一定程度上限制了這裡的可行選擇。 Valve 是目前唯一一個將推斷手部追蹤作為手部追蹤擴充的一部分實作的 XR 運作時。預計其他 XR 運作時將在不久的將來效倣此範例。

在此之前,如果您的遊戲依賴推斷手部跟踪,我們建議您使用 Godot XR Tools 中的手部素材。

透過互動設定檔進行追蹤

追蹤控制器的位置和狀態是透過互動設定檔執行的。可以在操作對應 <doc_xr_action_map>` 中設定綁定。

然而,重要的是要認識到,在 OpenXR 中,控制器綁定到指示這些控制器的使用的路徑。即,玩家左手握持的控制器綁定到“/user/hand/left”,而玩家右手握持的控制器則綁定到“/user/hand/right”。雖然 HTC 追蹤器擴充功能之外尚未受支援,但 OpenXR 很可能會在某個時候使用「/user/foot/left」和「/user/foot/right」等路徑進行擴充。

警告

因此,這種範例引出了一個問題:如果控制器沒有被使用者持有,會發生什麼情況。這個問題還沒有答案,仍在爭論中,規範可能在不久的將來發生變化。因此,該行為是未定義的,並且對於不同的平台可能有所不同。

最常見的是,無論玩家是否實際握住控制器,控制器都將保持綁定狀態。

然而,有些運作時(例如 Quest)可以在使用者未握住控制器時取消綁定控制器。

這可能會成為未來的常態,預計行動地圖系統將得到相應的增強。

手勢追蹤

OpenXR 有一個擴充,可以公開手部追蹤功能。此擴充功能允許遊戲請求手部骨骼以及每隻手的所有骨骼位置。

../../_images/openxr_hand_skeleton.webp

版權所有 (c) 2017-2022,The Khronos Group Inc. SPDX-授權-識別碼:CC-BY-4.0

上圖顯示了實作此擴充的每個 XR 運作時必須提供的關節。

目前,Godot 透過 OpenXRHand <class_openxrhand> 節點公開此功能。這是一個輔助節點,將從 OpenXR 檢索手部追蹤資料並將其應用到 Godot 中的骨架。您可以透過此節點上的“hand”屬性選擇左手或右手。

手素材本身必須由開發人員提供,因此與 OpenXRHand 節點分開。您將 OpenXRHand 節點上的「hand_sculpture」設定為需要套用追蹤資料的骨架。

如果 XR 運作時支援,您也可以設定「motion_range」屬性來限製手可以靠近的距離。

此資源的骨架必須具有以下骨骼:

建立內容

左手

光照烘焙

Palm_L

Palm_R

Wrist_L

Wrist_R

Thumb_Metacarpal_L

Thumb_Metacarpal_R

Thumb_Proximal_L

Thumb_Proximal_R

Thumb_Distal_L

Thumb_Distal_R

Thumb_Tip_L

Thumb_Tip_R

Index_Metacarpal_L

Index_Metacarpal_R

Index_Proximal_L

Index_Proximal_R

Index_Intermediate_L

Index_Intermediate_R

Index - 索引

Index - 索引

Index - 索引

Index - 索引

Middle_Metacarpal_L

Middle_Metacarpal_R

Middle_Proximal_L

Middle_Proximal_R

Middle_Intermediate_L

Middle_Intermediate_R

Middle_Distal_L

Middle_Distal_R

Middle_Tip_L

Middle_Tip_R

Ring_Metacarpal_L

Ring_Metacarpal_R

Ring_Proximal_L

Ring_Proximal_R

Ring_Intermediate_L

Ring_Intermediate_R

Ring_Distal_L

Ring_Distal_R

Ring_Tip_L

Ring_Tip_R

Little_Metacarpal_L

Little_Metacarpal_R

Little_Proximal_L

Little_Proximal_R

Little_Intermediate_L

Little_Intermediate_R

Little_Distal_L

Little_Distal_R

Little_Tip_L

Little_Tip_R

警告

從不同XR運作時返回的骨架資料通常不相容,這給跨平台開發帶來了問題。

例如,Microsoft 和 Meta 運作時都會將骨架基於玩家的實際手部。因此,這些骨骼將符合玩家手的大小。

與 Valve 相比,如果應用推斷的手部跟踪,則使用固定骨架。

我們仍在收集如何最好地處理平台中這些差異的經驗。

匯出到 Meta Quest 時,您需要啟用以下設定:

../../_images/xr_enable_handtracking.webp

烘焙

在撰寫本文時,OpenXR 不支援身體追蹤作為核心規範的一部分。隨著越來越多的身體追蹤解決方案進入市場,我們預計這種情況將在不久的將來發生變化。

目前,這裡唯一可用的選擇是透過 HTC 追蹤器。如果 XR 運作時支援 HTC 追蹤器,則可以使用一個擴充。這些都透過動作地圖系統充分暴露出來。

Godot 完全支援這些,您可以在動作圖中設定追蹤器。每個追蹤器都在 SteamVR 介面中分配了一個用途。

填寫下列設定:

HTC 追蹤器

/user/vive_tracker_htcx/role/handheld_object

/user/vive_tracker_htcx/role/left_foot

/user/vive_tracker_htcx/role/right_foot

/user/vive_tracker_htcx/role/left_shoulder

/user/vive_tracker_htcx/role/right_shoulder

/user/vive_tracker_htcx/role/left_elbow

/user/vive_tracker_htcx/role/right_elbow

/user/vive_tracker_htcx/role/left_knee

/user/vive_tracker_htcx/role/right_knee

/user/vive_tracker_htcx/role/waist

/user/vive_tracker_htcx/role/chest

/user/vive_tracker_htcx/role/camera

/user/vive_tracker_htcx/role/keyboard

訊號關鍵字

手部追蹤是一個仍在積極開發的領域,我們預計在不久的將來會有改進。

我們希望最終實作的基本原則是,動作圖將用於處理互動,而手部追蹤擴充將主要是一種可視化玩家手部的方法。希望 OpenXR 規範的改進能確保平台之間更好的可移植性。