XR_ANDROID_unbounded_reference_space OpenXR 擴充功能

名稱字串

XR_ANDROID_unbounded_reference_space

擴充功能類型

執行個體擴充功能

已註冊的擴充號碼

468

修訂版本

1

擴充功能和版本依附元件

OpenXR 1.0

上次修改日期

2024-09-12

IP 狀態

沒有已知的 IP 版權聲明。

著作人

Spencer Quin,Google

Jared Finder,Google

Fengtao Fan, Google

Lachlan Ford,Google

Nihav Jain,Google

Levana Chen,Google

總覽

這項擴充功能可讓應用程式建立 UNBOUNDED_ANDROID 參照空間。這個參考空間可讓觀眾在複雜的環境中自由移動,通常距離起點有數公尺之遙,同時也能持續針對觀眾附近的座標系統穩定性進行最佳化。隨著裝置感測更多環境資訊,以建立更佳的場景理解能力,參考空間的來源可能會隨著大幅調整而漂移,以維持裝置追蹤。

如要建立 UNBOUNDED_ANDROID 參考空間,應用程式可以設定 XrReferenceSpaceCreateInfo::referenceSpaceType XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID,並傳遞至 xrCreateReferenceSpace

XrInstance instance; // previously initialized
XrSession session; // previously initialized
XrPosef pose; // previously initialized

// Use the new reference space type in the create info struct
XrReferenceSpaceCreateInfo createInfo = {
    .type = XR_REFERENCE_SPACE_CREATE_INFO;
    .next = nullptr;
    .referenceSpaceType = XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID;
    .poseInReferenceSpace = pose;
}
XrSpace referenceSpace;
CHK_XR(xrCreateReferenceSpace(session, &createInfo, &referenceSpace));

// After usage
CHK_XR(xrDestroySpace(referenceSpace));

UNBOUNDED_ANDROID 參考空間會在裝置追蹤開始時,建立頭戴式耳機位置的全球鎖定原點。它會以重力方向對齊,排除俯仰和橫滾,並將 +X 指向右側、+Y 指向上方,而 -Z 指向前方。

當應用程式需要算繪超出單一 STAGE 邊界範圍的世界規模內容 (例如整棟建築物或多層樓) 時,UNBOUNDED_ANDROID 空間就非常實用。

UNBOUNDED_ANDROID 空間會隨著時間調整其原點,以維持觀眾附近的穩定性。視需要進行微幅大幅調整,以維持裝置追蹤。

  • 執行階段不應XrEventDataReferenceSpaceChangePending 事件排入佇列,以回應輕微調整
  • 為了因應大量調整,執行階段XrEventDataReferenceSpaceChangePending 事件排入佇列。舉例來說,由於追蹤失敗,UNBOUNDED_ANDROID 空間中的姿勢會重設,並根據世界中斷的估計值 (「新地圖」) 重新建立追蹤。
  • 系統會持續更新對世界的理解,並調整裝置追蹤。如果應用程式無論追蹤是否重設,都需要持續的位置資訊,則可在這種情況下使用錨點

參照聊天室變更事件

針對由 XrEventDataReferenceSpaceChangePending 結構定義的參數,該結構會在世界變更或最佳化重新定位事件時傳回:

typedef struct XrEventDataReferenceSpaceChangePending {
    XrStructureType         type;
    const void*             next;
    XrSession               session;
    XrReferenceSpaceType    referenceSpaceType;
    XrTime                  changeTime;
    XrBool32                poseValid;
    XrPosef                 poseInPreviousSpace;
} XrEventDataReferenceSpaceChangePending;

成員說明

  • referenceSpaceType」目前狀態:XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID
  • changeTime 會代表重新定位完成時的 XrTime
  • poseValid 會因為斷線估計值而為 false,或在重新連線後為 true
  • poseValidfalse 時,poseInPreviousSpace 將無效。

如果檢視畫面、控制器或其他空間相對於 UNBOUNDED_ANDROID 空間發生追蹤遺失情形,應用程式可以繼續接收推測或最後已知的 positionorientation 值。這些推斷姿勢可以根據頸部模型更新、慣性死算法或最後已知位置等資訊來推斷。應用程式可以假設會繼續設定 XR_SPACE_LOCATION_POSITION_VALID_BITXR_VIEW_STATE_POSITION_VALID_BIT,但 XR_SPACE_LOCATION_POSITION_TRACKED_BITXR_VIEW_STATE_POSITION_TRACKED_BIT 可能會在執行階段清除,以表示位置是透過這種方式推斷或最後已知。

追蹤功能恢復後,執行階段可能會任意重新設定原點,例如將原點移至與檢視器重疊的位置。應用程式可以檢查 XrEventDataReferenceSpaceChangePending 事件傳回的 poseValid 值,判斷是否可供使用。

新物件類型

新旗標類型

新列舉常數

XrReferenceSpaceType 列舉已擴充以下項目:

  • XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID

新列舉項目

新結構體

新函式

問題

版本記錄

  • 修訂版本 1,2024-09-12 (Levana Chen)
    • 初始擴充功能說明