Ya está aquí el Samsung Galaxy XR, potenciado por Android XR. Esta entrada de blog forma parte de nuestra Semana de Android XR, en la que proporcionamos recursos (entradas de blog, videos, código de muestra y mucho más) diseñados para ayudarte a aprender, crear y preparar tus apps para Android XR.
Esta semana, Samsung lanzó el Galaxy XR, creado en colaboración con Google y Qualcomm. Este es un momento emocionante para los desarrolladores, y queremos ayudarte a obtener el mejor rendimiento posible de tu app de RE.
Si bien el rendimiento deficiente en juegos y apps en dispositivos que no son de RE puede ser frustrante para el usuario, en el mundo de la RE, el rendimiento no es solo opcional, sino que es fundamental para el éxito de tu app. Si no alcanzas tu objetivo de velocidad de fotogramas en RE, puede causar problemas mucho más graves, como cinetosis.
En esta guía, te explicaremos las optimizaciones de rendimiento esenciales que debes comprender para el desarrollo de Android XR. Aprenderás qué funciones ofrecen las mayores mejoras de rendimiento, cuándo usarlas y cómo funcionan juntas para ayudarte a alcanzar tus objetivos de velocidad de fotogramas.
Esto es lo que buscamos:
- Mínimo: 72 FPS (parte de nuestros lineamientos de calidad de juego)
- Opcional: 90 FPS con un presupuesto de 11 ms por fotograma
Para obtener más información sobre por qué es importante mantener una velocidad de fotogramas tan alta, consulta nuestros lineamientos de rendimiento.
Funciones de rendimiento específicas de RE
Comenzaremos por analizar dos funciones de rendimiento específicas de la XR: el renderizado foveado y el submuestreo de Vulkan.
Renderización foveada
La renderización foveada es una optimización que tiene dos modos. El primero es un modo estático que renderiza el centro de la pantalla con una resolución más alta y disminuye progresivamente la resolución a medida que te alejas.
El segundo es el modo de seguimiento de ojos, que renderiza específicamente el área que estás mirando con todo detalle, mientras que reduce la calidad que se muestra en tus periféricos. Básicamente, imita el funcionamiento de la visión humana, en la que solo vemos detalles finos en el área específica en la que nos enfocamos.
La renderización foveada reduce significativamente la carga de trabajo de la GPU sin sacrificar la calidad de la imagen que percibe el usuario. Lo mejor del renderizado foveado es que los usuarios no notarán la reducción de calidad en su visión periférica, pero la GPU sí notará la mejora en el rendimiento.
Imagina que estás creando una experiencia de museo con artefactos 3D complejos. Sin la renderización foveada, tendrías dificultades para mantener 90 FPS mientras intentas renderizar todo en el "campo visual". Con la renderización foveada, puedes mantener esos detalles de alta densidad de polígonos donde el usuario está mirando, pero el entorno de fondo se renderiza con una calidad inferior. Tus usuarios no notarán la diferencia, pero tendrás el espacio necesario para agregar más detalles a tu escena.
Submuestreo de Vulkan
El submuestreo de Vulkan es el mejor aliado de la renderización foveada. Mientras que el renderizado foveado decide qué renderizar en diferentes niveles de calidad, el submuestreo de Vulkan controla cómo renderizar de manera eficiente los diferentes niveles de calidad con mapas de densidad de fragmentos.
Cuando se combina con el renderizado foveado, el submuestreo de Vulkan te brinda 0.5 ms adicionales de rendimiento. También ayuda a suavizar los bordes irregulares en tu visión periférica, lo que hace que la imagen general se vea más nítida.
Por ejemplo, en un juego de simulador de vuelo en el que los usuarios se enfocan en los instrumentos y los controles, combinar el renderizado foveado con el submuestreo de Vulkan significa que los controles detallados se renderizan con nitidez, pero la estructura periférica de la cabina usa menos recursos. Ese medio milisegundo adicional no parece mucho, pero es la diferencia entre tener espacio para un elemento interactivo adicional o perder fotogramas durante los momentos intensos.
Funciones de GPU para escenas complejas
Además de la renderización foveada y el submuestreo de Vulkan, existen algunas funciones de GPU que reducen la carga innecesaria a través de la creación de instancias y la eliminación inteligente. Son particularmente eficaces para escenas complejas con geometría repetida o una oclusión significativa.
GPU Resident Drawer
El GPU Resident Drawer usa automáticamente la creación de instancias de GPU para reducir las llamadas de dibujo y liberar tiempo de procesamiento de la CPU. Por lo tanto, en lugar de que la CPU le indique a la GPU sobre cada objeto de forma individual, la GPU agrupa objetos similares.
Esta función es más eficaz para escenas grandes con mallas repetidas, como árboles en un bosque, muebles en un edificio de oficinas o accesorios dispersos en un entorno.
Imagina una escena de bosque con 200 árboles que usan la misma malla base. Sin el GPU Resident Drawer, tienes 200 llamadas de dibujo que consumen la GPU, lo que libera la CPU. Cuando habilitas esta función, la GPU creará instancias de esos árboles de forma inteligente, lo que debería reducirla a solo 5 o 10 llamadas de dibujo. Eso representa un ahorro masivo de GPU que luego puedes invertir en la lógica del juego o en los cálculos de física.
Eliminación de oclusión de GPU
La eliminación de oclusión de GPU usa la GPU en lugar de la CPU para identificar y omitir la renderización de objetos ocultos. Detecta automáticamente lo que está ocluido (oculto) detrás de otros objetos, por lo que no desperdicias tu GPU en cosas que el usuario no puede ver.
Esta función es particularmente potente en espacios interiores con varias habitaciones, entornos densos o escenas arquitectónicas en las que las paredes, los pisos y los objetos bloquean la vista de forma natural.
Por ejemplo, supongamos que estás creando una experiencia de casa multiespacios. Cuando el usuario está en la sala de estar, ¿por qué desperdiciar ciclos de GPU renderizando la cocina con todos sus detalles si está completamente oculta detrás de una pared? La eliminación de oclusión de GPU omite automáticamente la renderización de esos objetos ocultos, lo que te brinda más presupuesto de rendimiento para lo que realmente es visible.
Supervisa tu rendimiento
No basta con solo usar estas funciones. También debes medir tus optimizaciones para poder cuantificar su impacto y verificar que los cambios realmente funcionen.
API de Métricas de rendimiento
La API de Performance Metrics proporciona supervisión en tiempo real del uso de memoria, el rendimiento de la CPU y el rendimiento de la GPU de tus apps. Te proporciona datos completos de las capas de compositor y de tiempo de ejecución, para que puedas ver exactamente lo que sucede en tu aplicación.
Establece un modelo de referencia antes de realizar los cambios, aplica una optimización, mide el impacto y, luego, itera. Este enfoque basado en datos significa que sabes que realmente estás mejorando el rendimiento, en lugar de adivinarlo.
Antes de habilitar el renderizado foveado, la latencia de fotogramas de la GPU podría ser de 13 ms, lo que supera el presupuesto de 11 ms. Habilita el renderizado foveado, vuelve a medir y, con suerte, verás que disminuye a 9 ms. Eso significa que ganaste 4 ms de margen para agregar más detalles a tu escena, mejorar la calidad visual en otros lugares o, simplemente, garantizar un rendimiento más fluido en una gama más amplia de contenido.
Sin estas métricas, estarás optimizando a ciegas. La API de Performance Metrics te dice la verdad sobre lo que realmente ayuda a tu caso de uso específico.
Depurador de fotogramas
El Frame Debugger es la herramienta integrada de Unity para comprender exactamente cómo se renderiza tu escena, fotograma por fotograma. Te muestra la secuencia de llamadas de dibujo y te permite recorrerlas para verificar que tus optimizaciones funcionen correctamente.
¿Quieres confirmar que el SRP Batcher esté funcionando? Busca entradas de "RenderLoopNewBatcher" en el depurador de fotogramas. ¿Cómo verificar si el GPU Resident Drawer está agrupando en lotes correctamente? Busca las entradas de "Hybrid Batch Group". Estas confirmaciones visuales te ayudan a comprender si tu configuración de optimización realmente está surtiendo efecto.
Recorre las primeras 50 llamadas de dibujo de tu escena. Si ves que se dibujan objetos similares de forma individual en lugar de por lotes, significa que la creación de instancias o el procesamiento por lotes no funcionan correctamente. El depurador de fotogramas hace que estos problemas se vean de inmediato para que puedas solucionarlos.
Optimizaciones adicionales
Además de las optimizaciones que mencionamos anteriormente, nuestra guía de rendimiento completa también incluye algunas otras optimizaciones adicionales. Aquí tienes un breve resumen:
- Configuración de URP: Inhabilita HDR y Post Processing para XR para dispositivos móviles. Estas funciones proporcionan un impacto visual mínimo en comparación con su costo de rendimiento en el hardware móvil, por lo que obtendrás mejoras de rendimiento medibles con diferencias visuales apenas perceptibles.
- SRP Batcher: Reduce la sobrecarga de la CPU para escenas con muchos materiales que usan la misma variante de sombreador. Si minimizas los cambios de estado de renderización entre las llamadas de dibujo, puedes reducir significativamente el tiempo de CPU que se dedica a la renderización.
- Frecuencia de actualización de la pantalla: Se ajusta de forma dinámica entre 72 fps y 90 fps según la complejidad de la escena. Disminuye la velocidad de fotogramas durante las secuencias complejas para mantener la estabilidad y, luego, auméntala durante los momentos más simples para lograr una interacción ultrafluida.
- Texturas de profundidad/opacas: Inhabilita estas opciones, a menos que se necesiten específicamente para los efectos de sombreador. Provocan operaciones de copia de GPU innecesarias que desperdician rendimiento sin proporcionar beneficios para la mayoría de las aplicaciones.
- Escala de renderización de URP: Este parámetro de configuración te permite renderizar con una resolución reducida para mejorar el rendimiento o aumentar la escala de renderización para mejorar la calidad visual.
Para obtener instrucciones paso a paso sobre estas y otras optimizaciones, consulta nuestra guía completa de rendimiento de Unity para Android XR.
Conclusión
El rendimiento de tu app de RE no es solo una casilla de verificación técnica. Es la diferencia entre una experiencia cómoda y atractiva, y una que hace que los usuarios se sientan mal o incómodos. Las optimizaciones que abordamos son tu kit de herramientas para alcanzar esos objetivos de velocidad de fotogramas críticos en los dispositivos de RE más recientes.
Esta es tu hoja de ruta:
- Comienza con el renderizado foveado y el submuestreo de Vulkan. Estas funciones específicas de XR ofrecen ahorros de GPU inmediatos y notables.
- Agrega GPU Resident Drawer y Occlusion Culling si tienes escenas complejas con geometría repetida o espacios interiores.
- Supervisa todo con la API de Performance Metrics para asegurarte de que los cambios realmente ayuden.
- Explora optimizaciones adicionales de URP para obtener un margen de rendimiento adicional
Es fundamental medir continuamente y realizar iteraciones. No todas las optimizaciones beneficiarán a todos los proyectos por igual, por lo que debes usar la API de Performance Metrics para tener una idea clara de lo que realmente ayuda a tu caso de uso específico.
Próximos pasos: Expande tus habilidades
¿Quieres conocer más detalles? Consulta los siguientes recursos:
- Guía de rendimiento de Unity para Android XR: Instrucciones de implementación paso a paso completas para todas las funciones que se describen aquí.
- Comienza a usar Unity y Android XR: Configura tu entorno de desarrollo y comienza a compilar.
- Documentación para desarrolladores de Android XR: Guías completas para todas las funciones de Android XR
-
Novedades de productosNos complace anunciar que ya está disponible la compatibilidad oficial con Unreal Engine y Godot para Android XR. También lanzaremos nuevas herramientas diseñadas para aumentar tu productividad y habilitar nuevas funciones de XR: el Android XR Engine Hub y el Android XR Interaction Framework.
Luke Hopkins, Ryan Bartley • Lectura de 4 min -
Novedades de productosLas apps que se orienten a la próxima versión de Android ya no podrán escribir directamente en los contactos con el permiso WRITE_CONTACTS.
Roxanna Aliabadi Walker • Lectura de 6 min -
Novedades de productosA medida que se acelera el desarrollo basado en agentes, la ingeniería de Android alcanza una nueva y emocionante frontera: pasar de la finalización de código asistida a agentes que ejecutan tareas de extremo a extremo bajo tu dirección. Tienes total libertad y flexibilidad para elegir los modelos y agentes que usas.
Jason Buchel • Lectura de 3 min
Recibe la información más reciente sobre el desarrollo de Android en tu bandeja de entrada todas las semanas.