Bei der Arbeit mit 3D‑Modellen unterstützt das Jetpack XR SDK den offenen Standard glTF
2.0. Wenn Android XR Apps rendert, die mit dem
Jetpack XR SDK erstellt wurden, werden 3D‑Modelle mit physikalisch basierten
Rendering-Techniken(Physically Based Rendering, PBR) gerendert, die im glTF 2.0-Standard angegeben sind
(zusammen mit unterstützten Erweiterungen). 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 exportieren (.gltf oder .glb-Dateien).
Wenn eine SpatialEnvironment-Skybox vom Nutzer oder von Ihrer
App angegeben wurde, werden 3D‑Modelle mit den Beleuchtungsinformationen der Umgebung
Skybox beleuchtet. Reflektierende Materialien und spiegelnde Highlights spiegeln ebenfalls die Skybox wider. Wenn Passthrough aktiviert wurde, basieren die Beleuchtung, Reflexionen und spiegelnden Highlights auf einem hellen Raum mit einer einzelnen gerichteten Lichtquelle.
Eine kurze Übersicht über die unterstützten Materialien finden Sie auf der Khronos-Website unter glTF PBR Properties. Informationen zum Anpassen von 3D‑Modellen mit diesen und anderen Eigenschaften finden Sie unter 3D‑Modelle in Ihrer App anpassen.
Assets-Ordner eine glTF-Datei hinzufügen
Nachdem Sie Ihre glTF-Datei erstellt haben, müssen Sie sie dem Anlagenverzeichnis in Android Studio hinzufügen. Wir empfehlen, ein models-Verzeichnis zu erstellen, um Ihre Asset-Typen besser zu organisieren.

3D‑Objekt mit SpatialGltfModel hinzufügen
Android XR unterstützt das glTF-Format für 3D‑Modelle, die in der Regel als
.glb-Dateien gespeichert werden. Verwenden Sie die
SpatialGltfModel zusammensetzbare Funktion, um diese Objekte Ihrem Layout hinzuzufügen. Diese API vereinfacht das Laden von Assets und die Verwaltung ihres Status.
Um ein Modell anzuzeigen, definieren Sie zuerst seine Quelle und seinen Status mit
rememberSpatialGltfModelState. Sie können
Modelle aus dem Ordner assets Ihrer App, einer URI oder
raw data laden.
val modelState = rememberSpatialGltfModelState( source = SpatialGltfModelSource.fromPath( Paths.get("models/model_name.glb") ) )
Nachdem der Status definiert wurde, verwenden Sie die zusammensetzbare Funktion SpatialGltfModel, um sie in einem Unterraum zu rendern.
SpatialGltfModel(state = modelState, modifier = SubspaceModifier)
3D‑Modell mit einer Compose-SceneCoreEntity platzieren
Wenn Sie ein 3D‑Modell mit SceneCoreEntity platzieren möchten, müssen Sie zuerst
die glTF-Datei mit GltfModel.create() in den Arbeitsspeicher laden. Anschließend können Sie ein 3D
Modell in ein SceneCoreEntity einfügen, um SceneCore-Komponenten mit
Compose für XR-Layouts zu verbinden. Weitere Informationen finden Sie unter
SceneCoreEntity verwenden, um ein 3D‑Objekt in Ihrem Layout zu platzieren.
3D‑Modell mit Jetpack Scenecore platzieren
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 jetzt 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 wurden.
Fügen Sie die glTF-Datei dem ActivitySpace hinzu. Rufen Sie
GltfModelEntity.create auf, um eine Entität zu erstellen und sie in den
ActivitySpace einzufügen. 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 mit Scene Viewer laden
Wenn Sie nach der einfachsten Möglichkeit suchen, ein 3D‑Modell mit grundlegenden Interaktionsfunktionen zu laden, können Sie Scene Viewer wie auf einem Mobilgerät verwenden. Ein wichtiger Unterschied zwischen Scene Viewer unter Android XR und auf Mobilgeräten besteht darin, dass Scene Viewer nur den Parameter für die Datei-URI unterstützt, der auf die glTF-Datei verweist. Alle anderen Parameter werden ignoriert.
Scene Viewer ist eine separate App, die mit einer 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 sehen Sie ein Beispiel für die Verwendung einer Intent, um eine glTF-Datei in Scene Viewer
unter Android XR anzusehen:
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