Después de agregar un modelo 3D a tu app, puedes personalizarlo para mejorar la experiencia visual e interactiva. Por ejemplo, puedes reproducir y controlar animaciones glTF integradas, definir propiedades de materiales personalizadas (como colores base o rugosidad metálica) y aplicar texturas personalizadas a tus modelos 3D. Estas funciones te permiten alterar de forma dinámica la apariencia y el comportamiento de un objeto durante el tiempo de ejecución.
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, especifica el nombre de la pista específica de la lista de animations. Llama a GltfAnimation.start() para comenzar a reproducir. Opcionalmente, puedes especificar la velocidad, el tiempo de búsqueda y si la animación debe repetirse o no con GltfAnimationStartOptions.
val animation = gltfEntity.animations.find { it.name == "Walk" } animation?.start(GltfAnimationStartOptions(shouldLoop = true))
También puedes pause(), resume() y stop() animaciones, así como usar seekTo() para saltar a un momento específico de la pista de animación. Para consultar el estado actual de la animación, usa GltfAnimation.AnimationState.
Personaliza las propiedades del material de tu modelo 3D
El sistema de materiales de Jetpack XR se basa en la especificación glTF™ 2.0, y los modelos 3D se renderizan con renderización basada en la física (PBR). Puedes ajustar los atributos del material durante el tiempo de ejecución para cambiar la apariencia de un objeto de forma dinámica según la entrada del usuario o el estado actual de la app.
Un Material define un conjunto de propiedades visuales para la superficie de un objeto y determina cómo interactúa esa superficie con la luz en la escena.
En Jetpack XR, las clases KhronosPbrMaterial y KhronosUnlitMaterial se usan para crear y manipular estos materiales. Como su nombre lo indica, los KhronosUnlitMaterials no tienen iluminación y no se ven afectados por la iluminación de la escena. KhronosPbrMaterial te permite personalizar una mayor variedad de propiedades, como el color del brillo, qué tan metálico o áspero es un objeto y si emite luz.
Para obtener más información sobre cada propiedad admitida y los parámetros personalizables en Android XR, consulta nuestra documentación de referencia. Para comprender mejor estas propiedades, consulta el glosario de Khronos.

Para personalizar las propiedades del material de tu modelo 3D, primero crearás el material nuevo con KhronosPbrMaterial. Deberás establecer el AlphaMode adecuado para el aspecto visual que deseas lograr:
val pbrMaterial = KhronosPbrMaterial.create( session = xrSession, alphaMode = AlphaMode.OPAQUE )
A continuación, define las propiedades que deseas modificar. En este ejemplo, usamos setBaseColorFactor para cambiar el color base. Este método requiere un Vector4, en el que los componentes x, y, z y w corresponden a los valores RGBA (rojo, verde, azul y alfa) respectivamente:
pbrMaterial.setBaseColorFactor( Vector4( x = 0.5f, y = 0.0f, z = 0.5f, w = 1.0f ) )
Crea texturas personalizadas para tu modelo 3D
Una Texture es un recurso de imagen que puedes aplicar a la superficie de un modelo 3D para proporcionar color, detalles o cualquier otra información de la superficie. La API de Jetpack XR Texture te permite cargar datos de imágenes, como archivos PNG, desde la carpeta /assets/ de tu app de forma asíncrona.
Cuando cargas una textura, puedes especificar un TextureSampler, que controla cómo se renderiza la textura. El muestreador define las propiedades de filtrado (para cuando la textura aparece más pequeña o más grande que su tamaño original) y los modos de ajuste (para controlar las coordenadas fuera del rango estándar de [0, 1]).
Un objeto Texture por sí solo son solo datos; debe asignarse a un Material para tener un efecto visual en un modelo 3D.

Para crear una textura personalizada, primero debes guardar el archivo de imagen en tu carpeta /assets/. Como práctica recomendada, también puedes crear un subdirectorio textures en esa carpeta.
Después de guardar el archivo en el directorio correspondiente, crea la textura con la API de Texture. Aquí también puedes aplicar un TextureSampler opcional si es necesario:
val texture = Texture.create( session = xrSession, path = Path("textures/texture_file.png") )
A continuación, define el tipo de textura y configura sus parámetros correspondientes. En este ejemplo, aplicamos una textura de oclusión y establecemos la intensidad:
pbrMaterial.setOcclusionTexture( texture = texture, strength = 1.0f )
Aplica materiales y texturas a tus objetos 3D
Para aplicar el nuevo material o textura, anula el material existente para un nodo específico en tu nodo glTF. Para ello, llama a setMaterialOverride en GltfModelNode:
gltfModelNode.setMaterialOverride( material = pbrMaterial )
Para quitar los materiales recién creados, llama a clearMaterialOverride en el nodo anulado anteriormente en tu GltfModelNode. De esta manera, el modelo 3D volverá a su estado predeterminado:
gltfModelNode.clearMaterialOverride()
glTF y el logotipo de glTF son marcas de Khronos Group Inc.