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(PBR) gerendert, die im glTF 2.0-Standard (zusammen mit unterstützten extensions
) angegeben sind. Die meisten Tools zur Erstellung digitaler Inhalte (DCC), z. B. Autodesk Maya, Maxon ZBrush, Blender und Spline, können 3D‑Modelle im glTF-Format (.gltf
- oder .glb
-Dateien) exportieren.
Wenn vom Nutzer oder von Ihrer App ein SpatialEnvironment
-Skybox angegeben wurde, werden 3D‑Modelle mit Beleuchtungsinformationen beleuchtet, die vom Skybox der Umgebung stammen. Reflektierende Materialien und Glanzlichter spiegeln auch den Skybox der Umgebung wider. Wenn die Funktion „Durchlässiger Modus“ aktiviert ist, basieren Beleuchtung, Reflexionen und Glanzlichter auf einem einfachen, hellen Raum mit einem einzelnen, gerichteten Licht.
Eine kurze Übersicht über die unterstützten Materialien finden Sie in den glTF PBR-Eigenschaften auf der Khronos-Website.
Es gibt zwei Hauptmethoden, mit denen Apps, die mit dem Jetpack XR SDK erstellt wurden, 3D‑Modelle laden können.
- Laden Sie es wie im folgenden Abschnitt beschrieben in die
ActivitySpace
hoch: 3D‑Modell in den ActivitySpace einfügen - Integrierten Szenen-Viewer über eine Intent verwenden
3D‑Modell in den ActivitySpace platzieren
Nachdem Sie die glTF-Datei haben, fügen Sie sie dem Assets-Verzeichnis in Android Studio hinzu. Wir empfehlen, ein models
-Verzeichnis zu erstellen, um deine Asset-Typen besser zu organisieren.
Rufen Sie createGltfResourceAsync
auf, um das glTF-Modell zu laden.
// load the gltf file
val gltfModel = xrSession.createGltfResourceAsync("models/saturn_rings.glb").await()
Zu diesem Zeitpunkt wird das Modell in den Arbeitsspeicher geladen, aber noch nicht gerendert. Wenn Sie viele 3D‑Modelle laden müssen oder Ihr Modell groß ist, sollten Sie sie vorab asynchron laden. So müssen Nutzer nicht warten, bis Ihre Modelle in den Arbeitsspeicher geladen werden.
Wir müssen das glTF in die ActivitySpace
einfügen. Rufe createGltfEntity
auf, um eine Entität zu erstellen und in die ActivitySpace
zu platzieren. Als Best Practice sollten Sie prüfen, ob sich die App in einem Zustand befindet, der die Nutzung von standortbezogenen Funktionen zulässt.
// check for spatial capabilities
if (xrSession.getSpatialCapabilities().hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_3D_CONTENT)){
// create the gltf entity using the gltf file from the previous snippet
val gltfEntity = xrSession.createGltfEntity(gltfModel)
}
Wenn Sie die App jetzt ausführen, sollte das geladene 3D‑Modell angezeigt werden.
3D‑Modell in ein Compose-Volume einfügen
Sie müssen das glTF zwar weiterhin mit createGltfResourceAsync
in den Arbeitsspeicher laden, aber Sie können 3D-Modelle in eine Volume
einfügen, wenn Sie Ihre Benutzeroberfläche mit Jetpack Compose for XR erstellen. Weitere Informationen finden Sie unter Mit einem Volumen ein 3D‑Objekt in Ihr Layout einfügen.
3D-Modelle animieren
Gemäß der glTF-Spezifikation können 3D‑Modelle Animationen enthalten.
Skelett- (Rigg-), starre und Morph-Ziel- (Form-Blending-)Animationen werden im Jetpack XR SDK unterstützt. Außerdem werden Materialanimationen unterstützt, die mit der glTF-Erweiterung KHR_animation_pointer
erstellt wurden.
Wenn Sie eine Animation abspielen möchten, rufen Sie startAnimation
auf und geben Sie den Namen der Animation an. Optional können Sie angeben, ob die Animation in einer Endlosschleife wiedergegeben werden soll.
//start a looping walk animation for a model
gltfEntity.startAnimation(loop = true, animationName = "Walk")
Wenn Sie startAnimation
ein zweites Mal aufrufen, wird die aktuelle Animation beendet und die neue gestartet.
Sie können den aktuellen Status der Animation über getAnimationState()
abfragen.
Wenn der beim Aufruf von startAnimation()
angegebene Animationsname nicht vorhanden ist, schlägt der Aufruf stillschweigend fehl, alle laufenden Animationen werden beendet und getAnimationState()
gibt STOPPED
zurück.
3D‑Modell mit dem Szenen-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 der Scene Viewer App auf Android XR und auf Mobilgeräten besteht darin, dass die Scene Viewer App nur den Datei-URI-Parameter unterstützt, der auf die glTF-Datei verweist. Alle anderen Parameter werden ignoriert.
Die Szenenanzeige ist eine separate App, die über eine Intent aufgerufen wird und im Vollansichtsmodus ausgeführt wird. Wenn Sie sie aufrufen, ist Ihre App also nicht mehr sichtbar und der Fokus liegt auf der Szenenanzeige. Alle Umgebungen, die Sie möglicherweise geändert haben, werden auf die Systemeinstellungen des Nutzers zurückgesetzt.
Hier ein Beispiel für die Verwendung einer Intent
, um eine glTF-Datei in Scene Viewer auf Android XR anzusehen:
val THREED_MODEL_URL = "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/FlightHelmet/glTF/FlightHelmet.gltf"
val MIME_TYPE = "model/gltf-binary"
val sceneViewerIntent = Intent(Intent.ACTION_VIEW)
val intentUri =
Uri.parse("https://arvr.google.com/scene-viewer/1.2")
.buildUpon()
.appendQueryParameter("file", THREED_MODEL_URL)
.build()
sceneViewerIntent.setDataAndType(intentUri, MIME_TYPE)
startActivity(sceneViewerIntent)
Weitere Informationen zu den Interaktivitätsoptionen für den Scene Viewer finden Sie in der Dokumentation zum Design von 3D‑Modellen.
glTF-Erweiterungen
Das Jetpack XR SDK unterstützt mehrere gfTF-Erweiterungen, die die Funktionen von 3D‑Modellen erweitern. Diese Funktionen sind sowohl in GltfEntity
als auch in der Szenenanzeige verfügbar.
KHR_animation_pointer
KHR_draco_mesh_compression
KHR_lights_punctual
KHR_materials_clearcoat
KHR_materials_sheen
KHR_materials_unlit
KHR_materials_variants
KHR_mesh_quantization
KHR_texture_basisu
KHR_texture_transform
EXT_texture_webp