הוספת מודלים תלת-ממדיים לאפליקציה

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

כשעובדים עם מודלים תלת-ממדיים, ערכת Jetpack XR SDK תומכת בתקן הפתוח glTF 2.0. כשמערכת Android XR מעבדת אפליקציות שנבנו באמצעות Jetpack XR SDK, מודלים תלת-ממדיים יעובדו באמצעות טכניקות של עיבוד פיזיקלי(PBR) שצוינו בתקן glTF 2.0 (יחד עם תוספים נתמכים). ברוב הכלים ליצירת תוכן דיגיטלי (DCC), כמו Autodesk Maya,‏ Maxon ZBrush,‏ Blender ו-Spline, אפשר לייצא מודלים תלת-ממדיים בפורמט glTF (קבצים עם הסיומת .gltf או .glb).

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

סקירה מהירה של החומרים הנתמכים מופיעה במאמר glTF PBR Properties באתר Khronos.

יש שתי דרכים עיקריות לטעון מודלים תלת-ממדיים באפליקציות שפותחו באמצעות Jetpack XR SDK.

מיקום מודל תלת-ממדי ב-ActivitySpace

אחרי שיש לכם קובץ glTF, השלב הבא הוא להוסיף אותו לספריית הנכסים ב-Android Studio. מומלץ ליצור ספרייה בשם models כדי לארגן טוב יותר את סוגי הנכסים.

דוגמה להוספת נכסים לספרייה ‎ /models

כדי לטעון את מודל ה-glTF, קוראים לפונקציה GltfModel.create().

val gltfModel = GltfModel.create(session, Paths.get("models", "saturn_rings.glb"))

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

צריך להוסיף את קובץ ה-glTF אל ActivitySpace. מבצעים קריאה ל-method‏ GltfModelEntity.create כדי ליצור ישות ולהציב אותה ב-ActivitySpace. מומלץ לוודא שהאפליקציה במצב שמאפשר יכולות מרחביות.

if (session.scene.spatialCapabilities.contains(SpatialCapability.SPATIAL_3D_CONTENT)) {
    val gltfEntity = GltfModelEntity.create(session, gltfModel)
}

עכשיו, כשמריצים את האפליקציה, אמור להופיע הדגם התלת-ממדי שנטען.

דוגמה למודל תלת-ממדי שנטען

הוספת אובייקט תלת-ממדי באמצעות SpatialGltfModel

‫Android XR תומך בפורמט glTF למודלים תלת-ממדיים, שבדרך כלל נשמרים כקבצים מסוג .glb. כדי להוסיף את האובייקטים האלה לפריסה, משתמשים ב-composable‏ SpatialGltfModel. ממשק ה-API הזה מפשט את התהליך של טעינת נכסים וניהול המצב שלהם.

כדי להציג מודל, קודם צריך להגדיר את המקור והמצב שלו באמצעות rememberSpatialGltfModelState. אפשר לטעון מודלים מהתיקייה assets של האפליקציה, מ-URI או מ-raw data.

val modelState = rememberSpatialGltfModelState(
    source = SpatialGltfModelSource.fromPath(
        Paths.get("models/model_name.glb")
    )
)

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

SpatialGltfModel(state = modelState, modifier = SubspaceModifier)

הצבת מודל תלת-ממדי ב-Compose SceneCoreEntity

כדי להציב מודל תלת-ממדי באמצעות SceneCoreEntity, קודם צריך לטעון את קובץ ה-glTF לזיכרון באמצעות GltfModel.create(). אחר כך אפשר להציב מודל תלת-ממדי בSceneCoreEntity כדי לגשר בין רכיבי SceneCore לבין פריסות Compose for XR. פרטים נוספים מופיעים במאמר בנושא שימוש ב-SceneCoreEntity כדי למקם אובייקט תלת-ממדי בפריסה.

טעינת מודל תלת-ממד באמצעות Scene Viewer

אם אתם מחפשים את הדרך הפשוטה ביותר לטעון מודל תלת-ממד עם יכולות בסיסיות של אינטראקציה, אתם יכולים להשתמש ב-Scene Viewer כמו במכשיר נייד. ההבדל העיקרי בין Scene Viewer ב-Android XR לבין Scene Viewer בנייד הוא שב-Scene Viewer יש תמיכה רק בפרמטר file URI שמפנה לקובץ glTF, וכל הפרמטרים האחרים מוזנחים.

Scene Viewer היא אפליקציה נפרדת שמופעלת באמצעות intent ופועלת במצב Full Space. כתוצאה מכך, כשתפעילו אותו, האפליקציה לא תהיה יותר גלויה ו-Scene Viewer יקבל את הפוקוס. כל הסביבות ששיניתם יאופסו להעדפות המערכת של המשתמש.

דוגמה לשימוש ב-Intent כדי להציג קובץ glTF ב-Scene Viewer ב-Android XR:

val url =
    "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/Avocado/glTF/Avocado.gltf"
val sceneViewerIntent = Intent(Intent.ACTION_VIEW)
val intentUri =
    Uri.parse("https://arvr.google.com/scene-viewer/1.2")
        .buildUpon()
        .appendQueryParameter("file", url)
        .build()
sceneViewerIntent.setData(intentUri)
try {
    startActivity(sceneViewerIntent)
} catch (e: ActivityNotFoundException) {
    // There is no activity that could handle the intent.
}

מידע נוסף על אפשרויות האינטראקטיביות ב-Scene Viewer זמין במסמכי התיעוד בנושא עיצוב מודלים תלת-ממדיים.

תוספי glTF

‫Jetpack XR SDK תומך בכמה תוספי gfTF שמרחיבים את היכולות של מודלים תלת-ממדיים. היכולות האלה זמינות גם דרך GltfModelEntity וגם דרך Scene Viewer.