תוסף OpenXR‏ XR_ANDROID_unbounded_reference_space

מחרוזת שם

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

לבנה צ'ן, Google

סקירה כללית

התוסף הזה מאפשר לאפליקציות ליצור מרחב UNBOUNDED_ANDROID מרומז. מרחב העזר הזה מאפשר לצופה לנוע בחופשיות בסביבה מורכבת, לעתים קרובות במרחק רב מהמקום שבו הוא התחיל, תוך אופטימיזציה מתמדת לשמירה על יציבות של מערכת הקואורדינטות ליד הצופה. ככל שהמכשיר מזהה יותר מהסביבה שלו כדי ליצור הבנה טובה יותר של הסצנה, המקור של מרחב העזר יכול לנדוד עם התאמות גדולות לפי הצורך כדי לשמור על מעקב אחר המכשיר.

כדי ליצור מרחב עזר מסוג UNBOUNDED_ANDROID, האפליקציה יכולה להגדיר את הערך XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID למאפיין XrReferenceSpaceCreateInfo::referenceSpaceType ולהעביר אותו ל-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 יוצר מקור של מיקום האוזניות ביחס לעולם, כשהמעקב אחרי המכשיר מתחיל. הוא מיושר לפי כוח הכבידה כדי להחריג את הטיה (pitch) וסיבוב (roll), כאשר +X מימין, +Y למעלה ו-Z לכיוון קדימה.

המרחב UNBOUNDED_ANDROID שימושי כשאפליקציה צריכה ליצור תוכן במיקום גיאוגרפי נרחב, שמשתרע מעבר לגבולות של STAGE יחיד, למשל קומה שלמה או כמה קומות של בניין.

כדי לשמור על יציבות של מרחב 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 אחרי החיבור מחדש.
  • הערך של poseInPreviousSpace לא יהיה תקף כאשר הערך של poseValid הוא false.

כשיש אובדן מעקב ביחס למרחב UNBOUNDED_ANDROID בתצוגות, בפקדים או במרחבים אחרים, האפליקציות יכולות להמשיך לקבל את הערכים המשוערים או האחרונים של position ו-orientation. למשל, אפשר שהתנוחות המשוערות האלה יתבססו על עדכונים של מודל הצוואר, על חישוב תנועה ינאי או על המיקום האחרון שידוע. אפליקציה יכולה להניח שהערכים של XR_SPACE_LOCATION_POSITION_VALID_BIT ו-XR_VIEW_STATE_POSITION_VALID_BIT ימשיכו להיות מוגדרים, אבל ייתכן ש-XR_SPACE_LOCATION_POSITION_TRACKED_BIT ו-XR_VIEW_STATE_POSITION_TRACKED_BIT יימחקו בסביבת זמן הריצה כדי לציין שהמיקום נגזר או שהוא המיקום הידוע האחרון.

כשהמעקב מתאושש, סביבת זמן הריצה עשויה למרכז את המקור באופן שרירותי, למשל להזיז את המקור כך שיתאים לצופה. אפליקציה יכולה לבדוק את הערך poseValid שמוחזר מהאירוע XrEventDataReferenceSpaceChangePending כדי לקבוע אם היא מוכנה לשימוש.

סוגי אובייקטים חדשים

סוגי דגלים חדשים

קבועים חדשים של Enum

המניין XrReferenceSpaceType הורחב עם:

  • XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID

משתני Enum חדשים

מבנים חדשים

פונקציות חדשות

בעיות

היסטוריית הגרסאות

  • גרסה 1, 12 בספטמבר 2024 (Levana Chen)
    • תיאור ראשוני של התוסף