היכולות המרחביות עשויות להשתנות בין מכשירים שונים, והן משתנות כשהמשתמשים יוצרים אינטראקציה עם האפליקציה או עם המערכת. יכול להיות שהאפליקציה עצמה תשנה את ההגדרות האלה – למשל, תעבור למצב 'מרחב ביתי' או 'מרחב מלא'. כדי להימנע מבעיות, האפליקציה צריכה לבדוק את היכולות המרחביות כדי לקבוע אילו ממשקי API נתמכים בסביבה הנוכחית.
בדיקת יכולות מרחביות באמצעות Jetpack Compose for XR
Jetpack Compose for XR יוצר Composition Local כדי לבדוק יכולות מרחביות. אפשר להשתמש בזה כדי לבדוק אם ממשק משתמש מרחבי, אודיו מרחבי, סביבות, העברה או תוכן תלת-ממדי מופעלים.
אתם יכולים להשתמש ב-LocalSpatialCapabilities.current כדי לבדוק אם היכולות המרחביות הבאות זמינות כרגע:
-
isSpatialUiEnabled: מציין אם האפליקציה יכולה ליצור רכיבי ממשק משתמש מרחביים (לדוגמה,SpatialPanel). -
isContent3dEnabled: מציין אם האפליקציה יכולה ליצור אובייקטים תלת-ממדיים. -
isAppEnvironmentEnabled: מציין אם האפליקציה יכולה להגדיר את הסביבה. -
isPassthroughControlEnabled: מציין אם האפליקציה יכולה לשלוט במצב ההעברה. -
isSpatialAudioEnabled: מציין אם האפליקציה יכולה להשתמש באודיו מרחבי.
בדוגמה הבאה אפשר לראות איך בודקים אם ממשק המשתמש המרחבי מופעל:
if (LocalSpatialCapabilities.current.isSpatialUiEnabled) { Subspace { SpatialPanel( modifier = SubspaceModifier .width(1488.dp) .fillMaxHeight() ) { AppContent() } } } else { AppContent() }
בדיקת יכולות מרחביות באמצעות SceneCore
כשמשתמשים בספריית SceneCore, צריך ליצור סשן. אחרי שיוצרים את הסשן, משתמשים ב-spatialCapabilities מתוך scene של הסשן כדי לשאול אילו יכולות מרחביות זמינות כרגע.
-
SPATIAL_3D_CONTENT: הפעילות יכולה ליצור תוכן תלת-ממדי. -
APP_ENVIRONMENT: הפעילות יכולה להגדיר סביבה משלה. -
EMBED_ACTIVITY: הפעילות יכולה להטמיע פעילות אחרת במרחב. -
PASSTHROUGH_CONTROL: הפעילות יכולה להפעיל או להשבית את ההעברה. -
SPATIAL_AUDIO: אפשר להשתמש באודיו מרחבי בפעילות. -
SPATIAL_UI: הפעילות יכולה להפוך למרחבית (לדוגמה, הוספת חלונית מרחבית).
אפשר גם להירשם לקריאה חוזרת (callback), addSpatialCapabilitiesChangedListener שתשלח לכם הודעה כשיכולות מרחביות משתנות.
// Example 1: check if enabling passthrough mode is allowed if (xrSession.scene.spatialCapabilities.contains( SpatialCapability.PASSTHROUGH_CONTROL ) ) { xrSession.scene.spatialEnvironment.preferredPassthroughOpacity = 1f } // Example 2: multiple capability flags can be checked simultaneously: if (xrSession.scene.spatialCapabilities.contains(SpatialCapability.PASSTHROUGH_CONTROL) && xrSession.scene.spatialCapabilities.contains(SpatialCapability.SPATIAL_3D_CONTENT) ) { // ... }
שימוש במצב מיזוג כדי לבדוק את יכולות התצוגה של המכשיר
ב-Android XR, למשקפי VR ולמשקפי AR קוויים יש יכולות חומרה שונות, במיוחד בכל הנוגע לסוג המסך. יכול להיות שתצטרכו להתאים את הצבעים של ממשק המשתמש והאובייקטים המעובדים באפליקציה כדי למקסם את הנראות. הנראות עשויה להיות מושפעת מסוג המסך וממצב השילוב המועדף שבו המכשיר משתמש. DisplayBlendMode API מספק את היכולת של המכשיר להשתמש במצב שילוב לצורך רינדור. אפשר להשתמש ב-API הזה כדי לקבוע איך תוכן וירטואלי מתווסף לעולם האמיתי.
אלה כמה מסוגי מצבי השילוב שכדאי להכיר:
-
ADDITIVE: תוכן וירטואלי מתווסף לעולם האמיתי על ידי הוספת ערכי הפיקסלים של כל אחד מהרכיבים: אדום, ירוק וכחול. המערכת מתעלמת מהאלפא, והפיקסלים השחורים מופיעים כשקופים. -
ALPHA_BLEND: תוכן וירטואלי מתווסף לעולם האמיתי על ידי מיזוג אלפא של ערכי הפיקסלים על סמך רכיב האלפא. -
NO_DISPLAY: מיזוג לא אפשרי במכשיר.
משתמשים ב-XrDevice.getCurrentDevice(session).getPreferredDisplayBlendMode() מתוך ספריית Jetpack XR Runtime כדי לבדוק באיזה סוג של מצב מיזוג נעשה שימוש, ומבצעים התאמות לפי הצורך.