Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se presenta la importancia del rendimiento de la aplicación Mixed Reality. Si la aplicación no se ejecuta a una velocidad de fotogramas óptima, la experiencia del usuario puede verse afectada. Los hologramas parecen inestables y el seguimiento de la cabeza del entorno se vuelve inexacto, lo que da lugar a una mala experiencia para el usuario. Considere la posibilidad de que el rendimiento sea una característica de primera clase para el desarrollo de realidad mixta, no una tarea polaca.
Los valores de velocidad de fotogramas de rendimiento para cada plataforma de destino se enumeran en la tabla siguiente.
| Plataforma | Velocidad de fotogramas objetivo |
|---|---|
| HoloLens | 60 FPS |
| equipos Windows Mixed Reality Ultra | 90 FPS |
| equipos Windows Mixed Reality | 60 FPS |
En el marco siguiente se describen los procedimientos recomendados para alcanzar las velocidades de fotogramas objetivo. Para obtener sugerencias sobre cómo medir y mejorar la velocidad de fotogramas en el entorno de Unity, consulte el artículo recomendaciones de rendimiento para Unity.
Descripción de los cuellos de botella de rendimiento
Si la aplicación tiene un rendimiento inferior a la velocidad de fotogramas, el primer paso consiste en analizar y comprender dónde se usa la aplicación de forma computacional. Dos procesadores principales controlan el trabajo para representar la escena: la CPU y la GPU. Cada procesador controla diferentes aspectos de la aplicación de Mixed Reality. Los tres lugares clave donde pueden producirse cuellos de botella son:
- Subproceso de aplicación: CPU : responsable de la lógica de la aplicación, incluida la entrada de procesamiento, las animaciones, la física y otra lógica de la aplicación.
- Procesamiento de subprocesos: CPU a GPU : responsable de enviar las llamadas de dibujo a la GPU. Cuando la aplicación quiere representar un objeto como un cubo o modelo, este subproceso envía una solicitud a la GPU para realizar las operaciones.
- GPU : normalmente controla la canalización de gráficos de la aplicación para transformar datos 3D (modelos, texturas, etc.) en píxeles. En última instancia, genera una imagen 2D para enviarla a la pantalla del dispositivo.
Por lo general, las aplicaciones de HoloLens están enlazadas a GPU, pero no siempre. Use las herramientas y técnicas de las secciones siguientes para comprender dónde se produce un cuello de botella en la aplicación determinada.
Análisis de la aplicación
Hay muchas herramientas que le permiten comprender el perfil de rendimiento y los posibles cuellos de botella en la aplicación de realidad mixta.
A continuación se muestran algunas herramientas comunes que le ayudarán a recopilar información de generación de perfiles detallada para la aplicación:
- Analizadores de rendimiento de gráficos Intel
- Depuradores de gráficos de Visual Studio
- Generador de perfiles de Unity
- Depurador de marcos de Unity
- Unreal Insights
- PIX
- Generación de perfiles de GPU en Unreal
Cómo generar perfiles en cualquier entorno
Una manera de determinar si la aplicación está enlazada a GPU o CPU es reducir la resolución de la salida de destino de representación. Al reducir el número de píxeles que se van a calcular, se reduce la carga de GPU. El dispositivo se representará en una textura más pequeña y, a continuación, se mostrará el ejemplo para mostrar la imagen final.
Después de reducir la resolución de representación, si:
- La velocidad de fotogramas de la aplicación aumenta y es probable que esté enlazado a GPU.
- Velocidad de fotogramas de la aplicación sin cambios, entonces es probable que esté enlazado a la CPU.
Nota:
Unity proporciona la capacidad de modificar fácilmente la resolución de destino de representación de la aplicación en tiempo de ejecución a través de la propiedad XRSettings.renderViewportScale . La imagen final presentada en el dispositivo tiene una resolución fija. La plataforma muestreará la salida de resolución más baja para crear una imagen de mayor resolución para la representación en las pantallas.
UnityEngine.XR.XRSettings.renderScale = 0.7f;
Cómo mejorar la aplicación
Recomendaciones de rendimiento de CPU
Por lo general, la mayoría del trabajo en una aplicación de realidad mixta en la CPU implica realizar la "simulación" de la escena y procesar la lógica de la aplicación. Las siguientes áreas están destinadas a la optimización:
- Animaciones
- Física
- Asignaciones de memoria
- Algoritmos complejos (es decir, cinemática inversa, búsqueda de rutas de acceso)
Recomendaciones de rendimiento de GPU
Descripción del ancho de banda frente a la tasa de relleno
Al representar un marco en la GPU, una aplicación está enlazada por ancho de banda de memoria o velocidad de relleno.
-
El ancho de banda de memoria es la velocidad de lecturas y escrituras que la GPU puede hacer desde la memoria.
- Para identificar las limitaciones de ancho de banda, reduzca la calidad de la textura y compruebe si la velocidad de fotogramas ha mejorado.
- Para identificar las limitaciones de la velocidad de relleno, reduzca la resolución de la pantalla y vea si mejora la velocidad de fotogramas.
Nota:
Si está trabajando con Unity, consulte nuestras recomendaciones de rendimiento de GPU específicas de Unity. - En Unity, use la propiedad XRSettings.renderViewportScale .
El ancho de banda de memoria suele implicar optimizaciones para:
- Resoluciones de textura más bajas
- Usar menos texturas (normales, especulares, etc.)
La tasa de relleno se centra en reducir el número de operaciones que deben calcularse para un píxel representado final, entre las que se incluyen:
- Número de objetos que se van a representar o procesar
- Número de operaciones por sombreador
- Número de fases de GPU al resultado final (sombreadores de geometría, efectos posteriores al procesamiento, etc.)
- Número de píxeles que se van a representar (resolución de pantalla)
Reducir el número de polígonos
Los recuentos de polígonos más altos dan lugar a más operaciones para la GPU, por lo que reducir el número de polígonos de la escena reduce el tiempo de representación. Hay otros factores que hacen que el sombreado de la geometría sea costoso, pero el recuento de polígonos es la métrica más sencilla para determinar cuánto trabajo se tardará en representar una escena.
Límite de sobredibujo
El sobredibujo alto se produce cuando se representan varios objetos, pero no se muestran en la pantalla, ya que están ocultos por un objeto que se oculta. Imagine mirar una pared que tiene objetos detrás. Toda la geometría se procesaría para la representación, pero solo es necesario representar el muro opaco, lo que da lugar a operaciones innecesarias.
Sombreadores
Los sombreadores son programas pequeños que se ejecutan en la GPU y realizan dos pasos importantes en la representación:
- Determinar qué vértices se deben dibujar y dónde están en el espacio de pantalla (el sombreador de vértices)
- El sombreador de vértices se ejecuta por vértice para cada malla.
- Determinar el color de cada píxel (el sombreador de píxeles)
- El sombreador de píxeles se ejecuta por píxel y se representa mediante la geometría en la textura de representación de destino.
Normalmente, los sombreadores realizan muchas transformaciones y cálculos de iluminación. Aunque los modelos de iluminación complejos, las sombras y otras operaciones pueden generar resultados fantásticos, también vienen con un precio. Reducir el número de operaciones calculadas en sombreadores puede reducir considerablemente el trabajo necesario para la GPU por fotograma.
Recomendaciones de codificación de sombreador
- Usar el filtrado bilineal, siempre que sea posible
- Reorganizar expresiones para usar intrínsecos MAD para realizar una multiplicación y una adición al mismo tiempo
- Precalcular tanto como sea posible en la CPU y pasar como constantes al material
-
Favorecer el movimiento de operaciones desde el sombreador de píxeles al sombreador de vértices
- Por lo general, el número de vértices es mucho menor que el número de píxeles (720p es 921.600 píxeles, 1080p es 2.073.600 píxeles, etc.)
Eliminación de fases de GPU
Los efectos posteriores al procesamiento pueden ser costosos y aumentar la tasa de relleno de la aplicación, incluidas técnicas de suavizado de alias como MSAA. En HoloLens, se recomienda evitar estas técnicas y fases de sombreador adicionales, como geometría, casco y sombreadores de proceso.
Recomendaciones de memoria
Las operaciones excesivas de asignación y desasignación de memoria pueden dar lugar a un rendimiento incoherente, fotogramas inmovilizados y otro comportamiento perjudicial. Es especialmente importante comprender las consideraciones de memoria al desarrollar en Unity, ya que el recolector de elementos no utilizados controla la administración de memoria.
Agrupación de objetos
La agrupación de objetos es una técnica popular para reducir el costo de asignaciones continuas y desasignaciones de objetos. Para ello, asigne un grupo grande de objetos idénticos y vuelva a usar instancias inactivas y disponibles de este grupo en lugar de generar y destruir objetos constantemente a lo largo del tiempo. Los grupos de objetos son excelentes para los componentes reutilizables que tienen una duración variable durante una aplicación.
Vea también
- Recomendaciones de rendimiento para Unity
- Configuración recomendada para Unity
- Recomendaciones de rendimiento para Unreal
- Recomendaciones materiales en Unreal
- Optimización de modelos 3D
- Procedimientos recomendados para convertir y optimizar modelos 3D en tiempo real
- Directrices de rendimiento para artistas y diseñadores para Unreal
- Procedimientos recomendados de VR para Unreal