שימוש ב'עומק גולמי' באפליקציית AR Foundation ל-Android

‏Raw Depth API מספק נתוני עומק לתמונה ממצלמה עם דיוק גבוה יותר מנתוני Depth API מלאים, אבל לא תמיד מכסה את כל הפיקסלים. אפשר גם לעבד תמונות עומק גולמיות, יחד עם תמונות האמון התואמות שלהן, כדי לאפשר לאפליקציות להשתמש רק בנתוני העומק שיש להם דיוק מספיק לצורכי השימוש הספציפיים שלהן.

אין לי מכשיר תואם

נתוני עומק גולמיים זמינים בכל המכשירים שתומכים ב-Depth API. כמו ב-Depth API המלא, גם ב-Raw Depth API לא נדרש חיישן עומק חומרה נתמך, כמו חיישן זמן תעופה (ToF). עם זאת, גם Raw Depth API וגם Depth API המלא משתמשים בכל חיישני החומרה הנתמכים שעשויים להיות במכשיר.

Raw Depth API לעומת Depth API מלא

‏Raw Depth API מספק אומדני עומק ברמת דיוק גבוהה יותר, אבל יכול להיות שתמונות עומק גולמי לא יכללו אומדני עומק לכל הפיקסלים בתמונה של המצלמה. לעומת זאת, Depth API מספק את העומק המשוער לכל פיקסל, אבל נתוני העומק לכל פיקסל עשויים להיות פחות מדויקים בגלל החלקה ואינטרפולציה של הערכות העומק. הפורמט והגודל של תמונות העומק זהים בשני ממשקי ה-API. רק התוכן שונה.

בטבלה הבאה ממחישים את ההבדלים בין Raw Depth API לבין ה-Depth API המלא באמצעות תמונה של כיסא ושולחן במטבח.

API החזרות תמונת המצלמה תמונה עם עומק תמונה לקביעת מהימנות
API גולמי של עומק
  • תמונה גולמית של עומק שמכילה אומדן עומק מדויק מאוד של חלק מהפיקסלים בתמונה מהמצלמה, אבל לא של כולם.
  • תמונה של רמת ביטחון שמציגה את רמת הביטחון של כל פיקסל בתמונה הגולמית של העומק. לפיקסלים בתמונה של המצלמה שאין להם אומדן עומק יש רמת ביטחון אפס.
API בעומק מלא
  • תמונה 'חלקה' אחת של עומק, שמכילה אומדן עומק לכל פיקסל.
  • לא מסופקת תמונה של רמת ביטחון עם ה-API הזה.
לא רלוונטי

תמונות של רמת סמך

בתמונות האמינות שמוחזרות על ידי Raw Depth API, לפיקסלים בהירים יותר יש ערכי אמינות גבוהים יותר, כאשר פיקסלים לבנים מייצגים אמינות מלאה ופיקסלים שחורים מייצגים חוסר אמינות. באופן כללי, באזורים בתמונה מהמצלמה שיש בהם יותר טקסטורה, כמו עץ, רמת האמינות של עומק הגלם תהיה גבוהה יותר מאשר באזורים ללא טקסטורה, כמו קיר ריק. בדרך כלל, משטחים ללא טקסטורה מניבים רמת ביטחון אפס.

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

עלות מחשוב

עלות המחשוב של Raw Depth API היא כמחצית מעלות המחשוב של Depth API המלא.

תרחישים לדוגמה

באמצעות Raw Depth API אפשר לקבל תמונות עומק שמספקות ייצוג מפורט יותר של הגיאומטריה של האובייקטים בסצנה. נתוני עומק גולמיים יכולים להיות שימושיים כשיוצרים חוויות AR שבהן נדרשים דיוק ופירוט עמוקים יותר של עומק לצורך משימות של הבנת גיאומטריה. תרחישים לדוגמה:

  • שחזור בתלת ממד
  • מדידה
  • זיהוי צורות

דרישות מוקדמות

לפני שממשיכים, חשוב להבין את המושגים הבסיסיים של AR ואת האופן שבו מגדירים סשן ARCore.

הפעלת עומק

בסשן ARCore חדש, בודקים אם המכשיר של המשתמש תומך בתכונה 'עומק'. לא כל המכשירים התואמים ל-ARCore תומכים ב-Depth API בגלל מגבלות של כוח עיבוד. כדי לחסוך במשאבים, התכונה 'עומק' מושבתת כברירת מחדל ב-ARCore. מפעילים את מצב העומק כדי שהאפליקציה תשתמש ב-Depth API.

var occlusionManager = // Typically acquired from the Camera game object.

// Check whether the user's device supports the Depth API.
if (occlusionManager.descriptor?.supportsEnvironmentDepthImage)
{
    // If depth mode is available on the user's device, perform
    // the steps you want here.
}

קבלת תמונת העומק הגולמית העדכנית ביותר

קוראים לפונקציה AROcclusionManager.TryAcquireEnvironmentDepthCpuImage() ומשתמשים בסמל AROcclusionManager.environmentDepthTemporalSmoothingRequested כדי לקבל את תמונת העומק העדכנית ביותר במעבד (CPU).

קבלת התמונה העדכנית ביותר של רווח בר-סמך גולמי

קוראים ל-AROcclusionManager.TryAcquireEnvironmentDepthConfidenceCpuImage() ומשתמשים ב-AROcclusionManager.environmentDepthTemporalSmoothingRequested כדי לקבל את תמונת האמון ב-CPU.

// Attempt to get the latest environment depth image.
if (occlusionManager && occlusionManager.TryAcquireEnvironmentDepthConfidenceCpuImage(out XRCpuImage image))
{
    using (image)
    {
        UpdateRawImage(m_RawEnvironmentDepthConfidenceImage, image);
    }
}
else
{
    m_RawEnvironmentDepthConfidenceImage.enabled = false;
}