Cuando trabajas con modelos 3D, el SDK de Jetpack XR admite el estándar abierto glTF 2.0. Cuando Android XR renderiza apps compiladas con el SDK de Jetpack XR, los modelos 3D se renderizan con técnicas de renderización basada en la física(PBR) especificadas en el estándar glTF 2.0 (junto con las extensiones compatibles). La mayoría de las herramientas de creación de contenido digital (DCC), como Autodesk Maya, Maxon ZBrush, Blender y Spline, pueden exportar modelos 3D en formato glTF (archivos .gltf o .glb).
Si el usuario o tu app especificaron una caja celeste SpatialEnvironment, los modelos 3D se iluminarán con la información de iluminación que proporciona la caja celeste del entorno. Los materiales reflectantes y los reflejos especulares también reflejarán la caja del cielo del entorno. Si se habilitó el modo de transferencia, la iluminación, los reflejos y los reflejos especulares se basarán en una habitación simple y luminosa con una sola luz direccional.
Para obtener una descripción general rápida de los materiales admitidos, consulta las propiedades de PBR de glTF en el sitio de Khronos.
Existen dos formas principales en que las apps compiladas con el SDK de Jetpack XR pueden cargar modelos 3D.
- Cárgalo en
ActivitySpacecomo se describe en Cómo colocar un modelo 3D enActivitySpace - Usa el Visor de escenas integrado a través de un intent
Coloca un modelo 3D en el ActivitySpace.
Una vez que tengas el archivo glTF, el siguiente paso es agregarlo al directorio de recursos en Android Studio. Te recomendamos que crees un directorio models para organizar mejor tus tipos de recursos.

Para cargar el modelo glTF, llama a GltfModel.create().
val gltfModel = GltfModel.create(session, Paths.get("models", "saturn_rings.glb"))
En este punto, el modelo se carga en la memoria, pero aún no se renderiza. Si tienes muchos modelos 3D para cargar o tu modelo es grande, es una buena idea cargarlos de forma asíncrona con anticipación. De esta manera, los usuarios no tienen que esperar a que tus modelos se carguen en la memoria.
Debemos agregar el glTF a ActivitySpace. Llama a GltfModelEntity.create para crear una entidad y colocarla en ActivitySpace. Como práctica recomendada, debes verificar que la app se encuentre en un estado que permita las capacidades espaciales.
if (session.scene.spatialCapabilities.contains(SpatialCapability.SPATIAL_3D_CONTENT)) { val gltfEntity = GltfModelEntity.create(session, gltfModel) }
Ahora deberías ver el modelo 3D cargado cuando ejecutes tu app.

Coloca un modelo 3D en un Compose SceneCoreEntity
Si bien deberás cargar el formato glTF en la memoria con GltfModel.create(), puedes colocar modelos 3D en un SceneCoreEntity si creas tu IU con Jetpack Compose para XR.
Consulta Cómo usar un SceneCoreEntity para colocar un objeto 3D en tu diseño.
Anima modelos 3D
Como parte de la especificación de glTF, los modelos 3D pueden tener animaciones incorporadas.
El SDK de Jetpack XR admite animaciones esqueléticas (con estructura), rígidas y de destino de morph (formas de combinación). También se admiten las animaciones de Material creadas con la extensión KHR_animation_pointer de glTF.
Para reproducir una animación, llama a startAnimation() y especifica el nombre de la animación. De manera opcional, puedes especificar si la animación debe repetirse de forma indefinida.
gltfEntity.startAnimation(loop = true, animationName = "Walk")
Si se llama a startAnimation por segunda vez, se detendrá la animación actual y comenzará la nueva.
Puedes consultar el estado actual de la animación a través de getAnimationState().
Si el nombre de la animación especificado cuando se llama a startAnimation() no existe, la llamada falla de forma silenciosa, se detienen todas las animaciones en ejecución y getAnimationState() devuelve STOPPED.
Cómo cargar un modelo 3D con Scene Viewer
Si buscas la forma más sencilla de cargar un modelo 3D con capacidades básicas de interacción, puedes optar por usar Scene Viewer como lo harías en dispositivos móviles. Una diferencia clave entre Scene Viewer en Android XR y en dispositivos móviles es que Scene Viewer solo admite el parámetro URI de archivo que apunta al archivo glTF, y se ignoran todos los demás parámetros.
Scene Viewer es una app independiente que se invoca con un intent y se ejecuta en el modo de espacio completo. Como resultado, cuando lo invoques, tu app ya no será visible y Scene Viewer tendrá el foco. Cualquier entorno que hayas cambiado se restablecerá a las preferencias del sistema del usuario.
Este es un ejemplo del uso de un Intent para ver un archivo glTF en Scene Viewer en 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. }
Para obtener más información sobre las opciones de interactividad de Scene Viewer, consulta nuestra documentación sobre el diseño de modelos 3D.
Extensiones de glTF
El SDK de XR de Jetpack admite varias extensiones de glTF que amplían las capacidades de los modelos 3D. Estas funciones están disponibles a través de GltfModelEntity y 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