Optimiza los recursos del entorno

A partir de la versión alpha04 de las bibliotecas de Jetpack XR, hay actualizaciones importantes sobre cómo debes proporcionar recursos de entorno espacial para obtener un rendimiento y una calidad visual óptimos. Estos cambios tienen un impacto en la compatibilidad y requieren la actualización de las apps existentes que establecen entornos espaciales.

Para proporcionar entornos espaciales, necesitas dos componentes principales:

  • Un archivo .glb o .gltf para la geometría del entorno (por ejemplo, el plano del suelo, los objetos cercanos) y la textura visual principal del cielo que ven los usuarios.
  • Un archivo ZIP independiente que contiene información de iluminación basada en imágenes (IBL) generada a partir de una imagen EXR de alto rango dinámico con la herramienta cmgen. El archivo ZIP se usa para los cálculos de iluminación, como los reflejos en los objetos, y no para la textura visual del cielo.

¿Por qué este enfoque?

Esta estructura de recursos actualizada ofrece las siguientes ventajas:

  • Tamaños de archivo más pequeños: En comparación con los métodos anteriores, como usar un solo archivo de cielo HDR de alta resolución para la visualización visual y la información de iluminación, este enfoque reduce los tamaños de archivo.
  • Rendimiento mejorado: Separar la textura del cielo visual (integrada en el glb) de los datos de IBL (en el archivo ZIP) te permite optimizar cada componente de forma independiente. Esto genera un ancho de banda de lectura de memoria de textura más bajo y un consumo de energía más bajo.
  • Iluminación optimizada: Usar un recurso de cielo con una resolución más baja específicamente para el mapa de iluminación es beneficioso para el rendimiento sin afectar de manera significativa los resultados visuales de la iluminación en los objetos.

Para obtener más información sobre cómo agregar un entorno espacial a tu app, consulta nuestra guía sobre cómo agregar entornos a tu app.

Optimiza tu glb

Tu glb representa la geometría alrededor del usuario y debes incluir la textura visual de tu cielo. En el caso de la geometría, debes intentar mantener los tamaños de archivo en 80 MB o menos.

Para ello, existen varias oportunidades para que tu entorno sea más eficiente y, al mismo tiempo, mantenga una alta calidad. Por ejemplo, la densidad de la malla debe ser la más densa cerca del usuario, y puedes disminuir la densidad de las mallas que están más lejos del usuario.

  • Distancia de visualización: La distancia de visualización para los entornos de Android XR es de 200 m desde el punto del usuario, y la textura del cielo debe cumplir con esta restricción. Esto proporciona una experiencia óptima, ya que la paralaje se vuelve indiscernible a esa distancia.
  • Altura del usuario: La geografía puede variar, pero coloca al usuario en un montículo de alrededor de 1.5 metros de altura para evitar que se recorte con elementos de la IU más grandes en las apps.

  • Cantidad de polígonos: Presta atención a la cantidad de polígonos en tus archivos glb, ya que una cantidad alta puede generar un consumo de energía innecesario. Cada parche de geometría no debe exceder los 10,000 vértices.

  • Compresión KTX: Optimiza el rendimiento de la GPU de tu archivo glb asegurándote de que use mipmaps y texturas ktx2.

Qué necesitarás para optimizar tu IBL

Descarga la utilidad de línea de comandos cmgen:

  • Puedes encontrar la versión más reciente en el repositorio de Filament.
  • Busca el archivo .tgz que contiene la versión precompilada de cmgen para tu plataforma y extráela.
  • La herramienta precompilada se encuentra en el directorio /bin del archivo .tgz extraído.

Recursos que debes preparar para generar el archivo .zip de la IBL:

  • Un archivo EXR de baja resolución que coincida con la textura de tu cielo.
    • La entrada de textura del cielo debe ser un archivo EXR. Aunque cmgen admite otros formatos, se recomiendan los EXR porque proporcionan la información de alto rango dinámico que es fundamental para proporcionar una IBL de alta calidad. El uso de otros formatos, como PNG, genera una iluminación menos precisa.
    • La imagen de origen (EXR) debe tener una proporción de 2:1 y dimensiones que sean una potencia de 2. Usa un archivo EXR de 1,024 × 512 píxeles. Nota: Puede parecer que 1,024 × 512 es una resolución demasiado baja, pero es beneficiosa para el rendimiento. En el caso de la IBL, los resultados visuales para el usuario son muy similares a los recursos de resolución de IBL mucho más altos.
  • Un archivo PNG negro sólido
    • Este recurso también debe tener una proporción de 2:1. Usa un tamaño de 100 x 50 píxeles.
    • Esto sirve como una textura optimizada para acompañar la IBL. Los usuarios no lo verán, por lo que nos enfocamos en optimizar el recurso para mejorar el rendimiento.

A continuación, se muestra un ejemplo del uso de cmgen para crear el archivo .zip de IBL. En este ejemplo, usamos archivos de entrada llamados my_360_skybox_1024_x_512.exr y black_skybox.png, y creamos un archivo .zip llamado my_ibl.zip

# Produce black cubemaps for the texture of the IBL asset.
./cmgen --format=rgb32f --size=128 --extract=./skybox_ibl ./black_skybox.png

# Produce lighting cubemaps and a Spherical Harmonics from EXR
./cmgen --format=rgb32f --size=128 --deploy=./skybox_ibl --ibl-ld=. --ibl-samples=1024 --extract-blur=0.0 --sh-irradiance --sh-shader --sh-output=./skybox_ibl/sh.txt ./my_360_skybox_1024_x_512.exr

# Copy all of the black cubemaps into the other folder.
cp -rf ./skybox_ibl/black_skybox/* ./skybox_ibl/my_360_skybox_1024_x_512

# Rename the directory to reflect that these are old assets.
mv ./skybox_ibl/black_skybox ./skybox_ibl/black_skybox_old

# Rename the directory to reflect that these are your cubemap assets.
mv ./skybox_ibl/my_360_skybox_1024_x_512 ./skybox_ibl/black_skybox

# Change into the child directory.
cd ./skybox_ibl

# Zip all of the cubemap and the Spherical Harmonics assets together.
zip -q my_ibl.zip black_skybox/*

# Return to the directory you started in.
cd ..