3D‑Modelle in Ihre App einfügen

XR‑Geräte, für die der Leitfaden gilt
Dieser Leitfaden hilft Ihnen dabei, Erlebnisse für die folgenden Arten von XR-Geräten zu entwickeln.
XR‑Headsets
Kabelgebundene XR‑Brillen

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 (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 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.

Es gibt zwei Hauptmethoden, mit denen Apps, die mit dem Jetpack XR SDK erstellt wurden, 3D‑Modelle laden können.

3D‑Modell in den ActivitySpace einfü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.

Beispiel für das Hinzufügen von Assets zum Verzeichnis „/models“

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.

Wir müssen die glTF-Datei in den ActivitySpace einfügen. 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.

Beispiel für das geladene 3D-Modell

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 das Modell in einem Unterraum zu rendern.

SpatialGltfModel(state = modelState, modifier = SubspaceModifier)

3D‑Modell in eine Compose-SceneCoreEntity einfügen

Wenn Sie ein 3D‑Modell mit SceneCoreEntity einfügen 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 eine SceneCoreEntity einfügen, um SceneCore-Komponenten mit Compose for XR-Layouts zu verbinden. Weitere Informationen finden Sie unter SceneCoreEntity verwenden, um ein 3D‑Objekt in Ihr Layout einzufügen.

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 ist im Fokus. 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 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.