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 Skybox der Umgebung beleuchtet. Reflektierende Materialien und Glanzlichter spiegeln ebenfalls die Skybox der Umgebung wider. Wenn die Passthrough-Funktion aktiviert ist, basieren die Beleuchtung, Reflexionen und Glanzlichter 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.
glTF-Datei zum Ordner „Assets“ hinzufügen
Sobald Sie Ihre glTF-Datei 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") ) )
Sobald der Status definiert ist, 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"))
An diesem Punkt wird das Modell 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-Aktion aufgerufen wird und im Full Space-Modus ausgeführt wird. Wenn Sie sie aufrufen, ist Ihre App nicht mehr sichtbar und Scene Viewer ist im Fokus. Alle von Ihnen geänderten Umgebungen werden auf die Systemeinstellungen des Nutzers zurückgesetzt.
Hier sehen Sie ein Beispiel für die Verwendung einer Intent-Aktion, 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