Personaliza modelos 3D en tu app

Dispositivos XR aplicables
Esta guía te ayuda a crear experiencias para estos tipos de dispositivos de XR.
Auriculares XR
Lentes de RE con cable

Después de agregar un modelo 3D a tu app, puedes mejorar la experiencia visual definiendo propiedades de material personalizadas y aplicando texturas al objeto. 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). Estos son estándares abiertos que mantiene Khronos Group.

Los atributos de material se pueden ajustar 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.

Para obtener detalles sobre cada propiedad compatible y los parámetros personalizables en Android XR, consulta nuestra documentación de referencia. Para comprender mejor estas propiedades, consulta el glosario de Khronos.

Personaliza las propiedades del material de tu modelo 3D

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.

Ejemplo de cómo cambiar los colores base en un modelo 3D

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 = 0.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; se debe asignar a un Material para que tenga un efecto visual en un modelo 3D.

Ejemplo de cómo cambiar la textura de 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 entidad glTF. Para ello, llama a setMaterialOverride en GltfModelEntity:

gltfModelEntity.setMaterialOverride(
    material = pbrMaterial,
    nodeName = "Node Name"
)

Para quitar los materiales recién creados, llama a clearMaterialOverride en el nodo anulado anteriormente en tu GltfModelEntity. De esta manera, el modelo 3D volverá a su estado predeterminado:

gltfModelEntity.clearMaterialOverride(
    nodeName = "Node Name"
)


glTF y el logotipo de glTF son marcas de Khronos Group Inc.