Quando lavori con modelli 3D, l'SDK Jetpack XR supporta lo standard aperto glTF
2.0. Quando Android XR esegue il rendering di app create con l'SDK Jetpack XR, i modelli 3D vengono sottoposti a rendering con tecniche di rendering basato sulla fisica(PBR) specificate nello standard glTF 2.0 (insieme alle estensioni supportate). La maggior parte degli strumenti di creazione di contenuti digitali (DCC),
come Autodesk Maya, Maxon ZBrush,
Blender e Spline, può esportare modelli 3D nel formato glTF (file .gltf o .glb).
Se l'utente o la tua app ha specificato una skybox SpatialEnvironment, i modelli 3D verranno illuminati con le informazioni sull'illuminazione fornite dalla skybox dell'ambiente. Anche i materiali riflettenti e le luci speculari rifletteranno la
skybox dell'ambiente. Se la visione pass-through è stata attivata, l'illuminazione,
i riflessi e le luci speculari si baseranno su una stanza semplice e luminosa con
una singola luce direzionale.
Per una rapida panoramica dei materiali supportati, consulta le proprietà PBR glTF sul sito di Khronos.
Esistono due modi principali per le app create con Jetpack XR SDK per caricare modelli 3D.
- Caricalo in
ActivitySpacecome descritto in Inserire un modello 3D inActivitySpace - Utilizzare Scene Viewer integrato tramite un intent
Inserire un modello 3D in ActivitySpace
Una volta ottenuto il file glTF, il passaggio successivo consiste nell'aggiungerlo alla directory degli asset
in Android Studio. Ti consigliamo di creare una directory models per organizzare meglio
i tipi di asset.

Per caricare il modello glTF, chiama GltfModel.create().
val gltfModel = GltfModel.create(session, Paths.get("models", "saturn_rings.glb"))
A questo punto, il modello viene caricato in memoria, ma non viene ancora sottoposto a rendering. Se hai molti modelli 3D da caricare o il modello è di grandi dimensioni, è consigliabile caricarli in modo asincrono in anticipo. In questo modo, gli utenti non devono attendere il caricamento dei modelli in memoria.
Dobbiamo aggiungere il glTF a ActivitySpace. Chiama
GltfModelEntity.create per creare un'entità e inserirla in
ActivitySpace. Come best practice, devi verificare che l'app si trovi in uno stato
che consenta le funzionalità spaziali.
if (session.scene.spatialCapabilities.contains(SpatialCapability.SPATIAL_3D_CONTENT)) { val gltfEntity = GltfModelEntity.create(session, gltfModel) }
Ora dovresti vedere il modello 3D caricato quando esegui l'app.

Inserire un modello 3D in un Compose SceneCoreEntity
Anche se dovrai comunque caricare il file glTF in memoria utilizzando
GltfModel.create(), puoi inserire i modelli 3D in un
SceneCoreEntity se crei la tua UI con Jetpack Compose per XR.
Consulta Utilizzare un oggetto SceneCoreEntity per posizionare un oggetto 3D nel layout.
Animare modelli 3D
Nell'ambito della specifica glTF, i modelli 3D possono avere animazioni incorporate.
Le animazioni scheletriche (rigged), rigide e morph target (forme di fusione) sono tutte
supportate nell'SDK Jetpack XR. Sono supportate anche le animazioni dei materiali create con l'KHR_animation_pointer estensione glTF.
Per riprodurre un'animazione, chiama startAnimation() e specifica il nome dell'animazione. Facoltativamente, puoi specificare se l'animazione deve essere riprodotta in loop
all'infinito.
gltfEntity.startAnimation(loop = true, animationName = "Walk")
Se chiami startAnimation una seconda volta, l'animazione corrente si interromperà e inizierà
quella nuova.
Puoi eseguire una query sullo stato attuale dell'animazione tramite
getAnimationState().
Se il nome dell'animazione specificato durante la chiamata di startAnimation() non esiste,
la chiamata non va a buon fine, le animazioni in esecuzione vengono interrotte e getAnimationState()
restituisce STOPPED.
Caricare un modello 3D utilizzando Scene Viewer
Se cerchi il modo più semplice per caricare un modello 3D con funzionalità di interazione di base, puoi scegliere di utilizzare Scene Viewer come faresti su dispositivo mobile. Una differenza fondamentale tra Scene Viewer su Android XR e su dispositivo mobile è che Scene Viewer supporta solo il parametro URI del file che punta al file glTF e tutti gli altri parametri vengono ignorati.
Scene Viewer è un'app separata che viene richiamata utilizzando un intent e viene eseguita in modalità Schermo intero. Di conseguenza, quando lo invochi, la tua app non sarà più visibile e Scene Viewer sarà in primo piano. Gli ambienti che potresti aver modificato verranno reimpostati sulle preferenze di sistema dell'utente.
Ecco un esempio di utilizzo di un Intent per visualizzare un file glTF in Scene Viewer
su 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. }
Per saperne di più sulle opzioni di interattività di Scene Viewer, consulta la nostra documentazione sulla progettazione di modelli 3D.
Estensioni glTF
L'SDK Jetpack XR supporta diverse estensioni gfTF che ampliano le funzionalità dei modelli 3D. Queste funzionalità sono disponibili sia tramite
GltfModelEntity sia tramite Scene Viewer.
KHR_animation_pointerKHR_draco_mesh_compressionKHR_lights_punctualKHR_materials_clearcoatKHR_materials_sheenKHR_materials_unlitKHR_materials_variantsKHR_mesh_quantizationKHR_texture_basisuKHR_texture_transformEXT_texture_webp