Das Jetpack XR SDK unterstützt den offenen Standard glTF 2.0 für 3D-Modelle. Wenn Android XR Apps rendert, die mit dem Jetpack XR SDK erstellt wurden, werden 3D‑Modelle mit physikalisch basierten Rendering-Techniken(PBR) gerendert, die im glTF 2.0-Standard (zusammen mit unterstützten Erweiterungen) angegeben sind. Die meisten Tools zur Erstellung digitaler Inhalte (Digital Content Creation, DCC), z. B. Autodesk Maya, Maxon ZBrush, Blender und Spline, können 3D-Modelle in das glTF-Format (.gltf- oder .glb-Dateien) exportieren.
Wenn der Nutzer oder Ihre App eine SpatialEnvironment-Skybox angegeben hat, werden 3D‑Modelle mit den Beleuchtungsinformationen der Umgebungsskybox beleuchtet. Reflektierende Materialien und spiegelnde Highlights spiegeln auch die Skybox der Umgebung wider. Wenn der Passthrough-Modus aktiviert ist, basieren die Beleuchtung, Reflexionen und spiegelnden Highlights auf einem einfachen, hellen Raum mit einer einzelnen gerichteten Lichtquelle.
Eine kurze Übersicht der unterstützten Materialien finden Sie auf der Khronos-Website unter glTF PBR Properties.
Es gibt zwei primäre Möglichkeiten, 3D-Modelle in Apps zu laden, die mit dem Jetpack XR SDK erstellt wurden.
- Laden Sie es in
ActivitySpace, wie unter 3D-Modell inActivitySpaceeinfügen beschrieben. - Den integrierten Scene Viewer über einen Intent verwenden
3D-Modell im ActivitySpace platzieren
Wenn Sie Ihre glTF-Datei haben, müssen Sie sie als Nächstes dem Asset-Verzeichnis in Android Studio hinzufügen. Wir empfehlen, ein models-Verzeichnis zu erstellen, um Ihre Asset-Typen besser zu organisieren.

Rufen Sie GltfModel.create() auf, um das glTF-Modell zu laden.
val gltfModel = GltfModel.create(session, Paths.get("models", "saturn_rings.glb"))
Das Modell wird in den Arbeitsspeicher geladen, aber noch nicht gerendert. Wenn Sie viele 3D‑Modelle laden müssen oder Ihr Modell groß ist, empfiehlt es sich, sie asynchron im Voraus zu laden. So müssen Nutzer nicht warten, bis Ihre Modelle in den Arbeitsspeicher geladen werden.
Wir müssen das glTF in ActivitySpace einfügen. Rufen Sie GltfModelEntity.create auf, um eine Entität zu erstellen und in ActivitySpace zu platzieren. Als Best Practice sollten Sie prüfen, ob sich die App in einem Zustand befindet, der räumliche Funktionen ermöglicht.
if (session.scene.spatialCapabilities.contains(SpatialCapability.SPATIAL_3D_CONTENT)) { val gltfEntity = GltfModelEntity.create(session, gltfModel) }
Wenn Sie Ihre App ausführen, sollte das geladene 3D-Modell jetzt angezeigt werden.

3D-Modell in eine Compose SceneCoreEntity einfügen
Sie müssen das glTF zwar weiterhin mit GltfModel.create() in den Arbeitsspeicher laden, aber Sie können 3D‑Modelle in ein SceneCoreEntity einfügen, wenn Sie Ihre Benutzeroberfläche mit Jetpack Compose für XR erstellen.
Weitere Informationen finden Sie unter SceneCoreEntity zum Platzieren eines 3D-Objekts im Layout verwenden.
3D-Modelle animieren
Gemäß der glTF-Spezifikation können 3D-Modelle Animationen enthalten.
Skelett-, starre und Morph-Target-Animationen (Blend Shapes) werden im Jetpack XR SDK unterstützt. Auch Materialanimationen, die mit der KHR_animation_pointer-glTF-Erweiterung erstellt wurden, werden unterstützt.
Rufen Sie startAnimation() auf und geben Sie den Namen der Animation an, um eine Animation abzuspielen. Optional können Sie angeben, ob die Animation in Endlosschleife wiederholt werden soll.
gltfEntity.startAnimation(loop = true, animationName = "Walk")
Wenn startAnimation ein zweites Mal aufgerufen wird, wird die aktuelle Animation beendet und die neue Animation gestartet.
Sie können den aktuellen Status der Animation über getAnimationState() abfragen.
Wenn der beim Aufrufen von startAnimation() angegebene Animationsname nicht vorhanden ist, schlägt der Aufruf ohne Fehlermeldung fehl, alle laufenden Animationen werden beendet und getAnimationState() gibt STOPPED zurück.
3D-Modell mit Scene Viewer laden
Wenn Sie ein 3D-Modell mit grundlegenden Interaktionsfunktionen auf einfachste Weise laden möchten, können Sie Scene Viewer wie auf Mobilgeräten verwenden. Ein wichtiger Unterschied zwischen dem Scene Viewer auf Android XR und auf Mobilgeräten besteht darin, dass der Scene Viewer nur den Datei-URI-Parameter unterstützt, der auf die glTF-Datei verweist. Alle anderen Parameter werden ignoriert.
Scene Viewer ist eine separate App, die über einen Intent aufgerufen wird und im Full Space-Modus ausgeführt wird. Wenn Sie sie aufrufen, ist Ihre App nicht mehr sichtbar und Scene Viewer wird in den Vordergrund gerückt. Alle Umgebungen, die Sie möglicherweise geändert haben, werden auf die Systemeinstellungen des Nutzers zurückgesetzt.
Hier ist ein Beispiel für die Verwendung eines Intent zum Anzeigen einer glTF-Datei in Scene Viewer unter 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. }
Weitere Informationen zu den Interaktivitätsoptionen für Scene Viewer finden Sie in unserer Dokumentation zum Design von 3D-Modellen.
glTF-Erweiterungen
Das Jetpack XR SDK unterstützt mehrere glTF-Erweiterungen, die die Funktionen von 3D-Modellen erweitern. Diese Funktionen sind sowohl über die GltfModelEntity als auch über Scene Viewer verfügbar.
KHR_animation_pointerKHR_draco_mesh_compressionKHR_lights_punctualKHR_materials_clearcoatKHR_materials_sheenKHR_materials_unlitKHR_materials_variantsKHR_mesh_quantizationKHR_texture_basisuKHR_texture_transformEXT_texture_webp