Samsung Galaxy XR ya está aquí, con tecnología de 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, compilar y preparar tus apps para Android XR.
Esta semana, Samsung lanzó Galaxy XR, creado en colaboración con Google y Qualcomm. Este es un momento emocionante para los desarrolladores, y queríamos ayudarte a obtener el mejor rendimiento posible de tu app de XR.
Si bien el bajo rendimiento en juegos y apps en dispositivos que no son de XR puede ser frustrante para el usuario, en el mundo del rendimiento de XR no es solo opcional, sino que es fundamental para el éxito de tu app. Si no alcanzas tu objetivo de velocidad de fotogramas en XR, puede causar problemas mucho más graves, como mareos.
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 ganancias de rendimiento, cuándo usarlas y cómo funcionan en conjunto para ayudarte a alcanzar tus objetivos de velocidad de fotogramas.
Estos son nuestros objetivos:
- Mínimo: 72 fps (parte de nuestros lineamientos de calidad de reproducción)
- 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 XR
Comenzaremos con dos funciones de rendimiento específicas de XR: la renderización foveada 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 reduce progresivamente la resolución cuanto más lejos mires.
El segundo es el modo de seguimiento ocular que renderiza específicamente el área en la que estás mirando con todo detalle, mientras que reduce la calidad que se muestra en tus periféricos. Básicamente, imita cómo funciona 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 imagen percibida para el usuario. La belleza de la renderización foveada es que los usuarios no notarán la calidad reducida en su visión periférica, pero tu GPU sí notará el rendimiento mejorado.
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 cuando intentas renderizar todo en el "campo de visión". Con la renderización foveada, puedes mantener esos detalles de alta poligonización donde mira el usuario, pero el entorno de fondo se renderiza con una calidad inferior. Tus usuarios no notarán la diferencia, pero tendrás espacio para agregar más detalles a tu escena.
Submuestreo de Vulkan
El submuestreo de Vulkan es el mejor amigo de la renderización foveada. Si bien la renderización foveada 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 los mapas de densidad de fragmentos.
Cuando se combina con la renderización foveada, 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 instrumentos y controles, combinar la renderización foveada con el submuestreo de Vulkan significa que los controles detallados se renderizan de forma nítida, pero la estructura periférica de la cabina usa menos recursos. Esos 0.5 ms adicionales no parecen mucho, pero es la diferencia entre tener espacio para un elemento interactivo adicional o descartar fotogramas durante 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 tensión innecesaria a través de la creación de instancias y la eliminación inteligentes. Son particularmente eficaces para escenas complejas con geometría repetida o 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 el tiempo de procesamiento de la CPU. Por lo tanto, en lugar de que la CPU le diga 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 GPU Resident Drawer, tienes 200 llamadas de dibujo que consumen la GPU, por lo que liberan la CPU. Cuando habilitas esta función, la GPU creará instancias de forma inteligente de esos árboles, lo que debería reducirla a solo 5 a 10 llamadas de dibujo. Es un ahorro masivo de GPU que puedes invertir en lógica de juego o cálculos de física.
GPU Occlusion Culling
GPU Occlusion Culling 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 elementos 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 naturalmente la vista.
Por ejemplo, supongamos que estás creando una experiencia de casa de varias habitaciones. Cuando el usuario está en la sala de estar, ¿por qué desperdiciar ciclos de GPU renderizando la cocina completamente detallada que está completamente oculta detrás de una pared? GPU Occlusion Culling omite automáticamente la renderización de esos objetos ocultos, lo que te brinda más presupuesto de rendimiento para lo que es visible.
Supervisa tu rendimiento
No basta con usar estas funciones. También debes medir tus optimizaciones para poder cuantificar su impacto y verificar que los cambios realmente funcionen.
API de Performance Metrics
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 integrales de las capas de compositor y de tiempo de ejecución, para que puedas ver exactamente lo que sucede en tu aplicación.
Establece una línea de base antes de realizar los cambios, aplica una optimización, mide el impacto y realiza iteraciones. Este enfoque basado en datos significa que sabes que realmente estás mejorando el rendimiento en lugar de adivinar.
Antes de habilitar la renderización foveada, el tiempo de fotogramas de la GPU podría ser de 13 ms, lo que supera tu presupuesto de 11 ms. Habilita la renderización foveada, vuelve a medir y, con suerte, verás que disminuye a 9 ms. Son 4 ms de espacio que obtuviste para agregar más detalles a tu escena, mejorar la calidad visual en otro lugar o simplemente garantizar un rendimiento más fluido en una variedad más amplia de contenido.
Sin estas métricas, está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.
Frame Debugger
El Frame Debugger es la herramienta integrada de Unity para comprender exactamente cómo se renderiza tu escena, fotograma a fotograma. Te muestra la secuencia de llamadas de dibujo y te permite recorrerlas para verificar que tus optimizaciones funcionen correctamente.
¿Quieres confirmar que SRP Batcher funciona? Busca entradas "RenderLoopNewBatcher" en Frame Debugger. ¿Quieres verificar si GPU Resident Drawer agrupa correctamente? Busca entradas "Hybrid Batch Group". Estas confirmaciones visuales te ayudan a comprender si la configuración de optimización realmente está surtiendo efecto.
Recorre las primeras 50 llamadas de dibujo de tu escena. Si ves objetos similares que se dibujan de forma individual en lugar de agruparse, eso te indica que la creación de instancias o la agrupación no funcionan correctamente. Frame Debugger hace que estos problemas sean visibles de inmediato para que puedas abordarlos.
Optimizaciones adicionales
Además de las optimizaciones que analizamos anteriormente, nuestra guía de rendimiento completa también incluye algunas otras optimizaciones adicionales. Aquí tienes un resumen rápido:
- Configuración de URP: Inhabilita HDR y el procesamiento posterior para XR móvil. 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 ganancias 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 dedicado a la renderización.
- Frecuencia de actualización de la pantalla: Ajusta de forma dinámica entre 72 fps y 90 fps según la complejidad de la escena. Reduce la velocidad de fotogramas durante las secuencias complejas para mantener la estabilidad y, luego, auméntala durante los momentos más simples para una interacción ultrasuave.
- Texturas opacas o de profundidad: Inhabilita estas opciones, a menos que sean necesarias específicamente para los efectos de sombreador. Causan operaciones de copia de GPU innecesarias que desperdician el 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 obtener beneficios de rendimiento o aumentar la renderización para mejorar la calidad visual.
Para obtener instrucciones paso a paso sobre estas y más optimizaciones, consulta nuestra Guía de rendimiento de Unity completa para Android XR.
Conclusión
El rendimiento de tu app de XR 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 enfermos o incómodos. Las optimizaciones que analizamos son tu kit de herramientas para alcanzar esos objetivos críticos de velocidad de fotogramas en los dispositivos XR más recientes.
Esta es tu hoja de ruta:
- Comienza con la renderización foveada 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 espacio adicional de rendimiento.
Es fundamental medir y realizar iteraciones de forma continua. No todas las optimizaciones beneficiarán a todos los proyectos por igual, por lo que debes usar la API de Performance Metrics para obtener 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 explican 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
Seguir leyendo
-
Novedades de productos
El flujo de trabajo y las necesidades de IA de cada desarrollador son únicos, y es importante poder elegir cómo la IA ayuda a tu desarrollo. En enero, presentamos la capacidad de elegir cualquier modelo de IA local o remoto para potenciar la funcionalidad de IA en Android Studio.
Matthew Warner • 2 min de lectura
-
Novedades de productos
Android Studio Panda 3 ahora es estable y está listo para que lo uses en producción. Esta versión te brinda aún más control y personalización sobre tus flujos de trabajo potenciados por IA, lo que hace que sea más fácil que nunca compilar apps para Android de alta calidad.
Matt Dyor • 3 min de lectura
-
Novedades de productos
En Google, nos comprometemos a llevar los modelos de IA más potentes directamente a los dispositivos Android que tienes en el bolsillo. Hoy, nos complace anunciar el lanzamiento de nuestro modelo abierto de vanguardia más reciente: Gemma 4.
Caren Chang, David Chou • 3 min de lectura
Mantente al día
Recibe la información más reciente sobre el desarrollo de Android en tu bandeja de entrada todas las semanas.