Quando si lavora con i modelli 3D, Jetpack XR SDK supporta lo standard aperto glTF
2.0. Quando Android XR esegue il rendering delle app create con il
Jetpack XR SDK, 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 (.gltf o .glb file).
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 il passthrough è stato attivato, l'illuminazione, i riflessi e le luci speculari si baseranno su una stanza luminosa con una singola luce direzionale.
Per una rapida panoramica dei materiali supportati, consulta le proprietà PBR glTF sul sito di Khronos. Per scoprire come personalizzare i tuoi modelli 3D con queste e altre proprietà, consulta Personalizzare i modelli 3D nella tua app
Aggiungere un file glTF alla cartella degli asset
Una volta che hai 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.

Aggiungere un oggetto 3D utilizzando SpatialGltfModel
Android XR supporta il formato glTF per i modelli 3D, in genere salvati come
.glb file. Per aggiungere questi oggetti al layout, utilizza il
SpatialGltfModel componibile. Questa API semplifica il processo di caricamento degli asset e di gestione del loro stato.
Per visualizzare un modello, definisci prima la sua origine e il suo stato utilizzando
rememberSpatialGltfModelState. Puoi caricare
i modelli dalla cartella assets della tua app, da un URI o da
raw data.
val modelState = rememberSpatialGltfModelState( source = SpatialGltfModelSource.fromPath( Paths.get("models/model_name.glb") ) )
Una volta definito lo stato, utilizza il componibile SpatialGltfModel per eseguirne il rendering all'interno di un sottospazio.
SpatialGltfModel(state = modelState, modifier = SubspaceModifier)
Posizionare un modello 3D utilizzando un oggetto SceneCoreEntity di Compose
Per posizionare un modello 3D utilizzando SceneCoreEntity, devi prima caricare
il file glTF in memoria utilizzando GltfModel.create(). Puoi quindi inserire un modello 3D
in un SceneCoreEntity per collegare i componenti SceneCore con
i layout di Compose per XR. Consulta
Utilizzare un oggetto SceneCoreEntity per posizionare un oggetto 3D nel layout.
Posizionare un modello 3D utilizzando Jetpack Scenecore
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 devi caricare molti modelli 3D o se il modello è di grandi dimensioni, ti consigliamo di caricarli in modo asincrono in anticipo. In questo modo, gli utenti non devono attendere il caricamento dei modelli in memoria.
Aggiungi il file glTF a ActivitySpace. Chiama
GltfModelEntity.create per creare un'entità e inserirla nel
ActivitySpace. Come best practice, devi verificare che l'app sia 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.

Caricare un modello 3D utilizzando Scene Viewer
Se stai cercando 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 richiami, la tua app non sarà più visibile e Scene Viewer avrà lo stato attivo. Tutti 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 ulteriori informazioni sulle opzioni di interattività per Scene Viewer, consulta la nostra documentazione sulla progettazione di modelli 3D.
Estensioni glTF
Jetpack XR SDK supporta diverse estensioni glTF che espandono le funzionalità dei modelli 3D. Queste funzionalità sono disponibili sia tramite le
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