Descripción del rendimiento de la realidad mixta

Este artículo es una introducción a la comprensión de la importancia del rendimiento de la aplicación de Mixed Reality. La experiencia del usuario se puede degradar considerablemente si la aplicación no se ejecuta a una velocidad de fotogramas óptima. Los hologramas aparecerán inestables y el seguimiento de cabezas del entorno será inexacto, lo que dará lugar a una mala experiencia para el usuario. El rendimiento debe considerarse una característica de primera clase para el desarrollo de realidad mixta y no una tarea pulida.

A continuación se enumeran los valores de velocidad de fotogramas de rendimiento para cada plataforma de destino.

Plataforma Velocidad de fotogramas de destino
HoloLens 60 FPS
equipos de Windows Mixed Reality Ultra 90 FPS
equipos de Windows Mixed Reality 60 FPS

En el marco siguiente se describen los procedimientos recomendados para alcanzar las velocidades de fotogramas de destino. Para obtener sugerencias sobre cómo medir y mejorar la velocidad de fotogramas en el entorno de Unity, se recomienda leer las recomendaciones de rendimiento para Unity.

Descripción de los cuellos de botella de rendimiento

Si la aplicación tiene una velocidad de fotogramas con un rendimiento inferior, el primer paso consiste en analizar y comprender dónde la aplicación consume mucho cálculo. Hay dos procesadores principales responsables del trabajo para representar la escena: la CPU y la GPU, cada uno de los cuales controla distintos aspectos de la aplicación de Mixed Reality. Los tres lugares clave donde pueden producirse cuellos de botella son:

  1. 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.
  2. Representar subproceso: CPU en GPU : responsable de enviar las llamadas de draw a la GPU. Cuando la aplicación quiere representar un objeto como un cubo o un modelo, este subproceso envía una solicitud a la GPU para realizar las operaciones.
  3. 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.

Duración de un marco

Por lo general, las aplicaciones de HoloLens estarán enlazadas con GPU, pero no siempre. Use las herramientas y técnicas siguientes para comprender dónde se encuentra la aplicación concreta con cuellos de botella.

Análisis de la aplicación

Hay muchas herramientas que 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 detallada de generación de perfiles para la aplicación:

Generación de 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, reducirá la carga de la GPU. El dispositivo se representará en una textura más pequeña y, a continuación, muestra arriba para mostrar la imagen final.

Después de reducir la resolución de representación, si:

  1. Aumenta la velocidad de fotogramas de la aplicación y, a continuación, es probable que esté enlazado a GPU.
  2. Velocidad de fotogramas de la aplicación sin cambios y, a continuación, es probable que esté enlazado a cpu.

Nota

Unity ofrece la posibilidad de modificar fácilmente la resolución de destino de representación de la aplicación en tiempo de ejecución mediante la propiedad XRSettings.renderViewportScale. La imagen final presentada en el dispositivo tiene una resolución fija. La plataforma realizará una muestra de la salida de resolución inferior para crear una imagen de resolución superior para su 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, inversos kinematics, path-finding)

Recomendaciones de rendimiento de GPU

Descripción del ancho de banda frente a la tasa de relleno

Al representar un fotograma en la GPU, una aplicación estará limitada por el ancho de banda de memoria o la velocidad de relleno.

  • El ancho de banda de memoria es la velocidad de lecturas y escrituras que puede hacer la GPU 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 velocidad de relleno, reduzca la resolución de 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 generalmente implica optimizaciones para:

  1. Resoluciones de textura inferior
  2. Usar menos texturas (normales, especular, etc.)

La velocidad de relleno se centra en reducir el número de operaciones que se deben calcular para un píxel representado final, entre las que se incluyen:

  1. Número de objetos que se van a representar o procesar
  2. Número de operaciones por sombreador
  3. Número de fases de GPU para el resultado final (sombreadores de geometría, efectos posteriores al procesamiento, etc.)
  4. 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 tardará en representar una escena.

Sobredibujo del límite

El exceso de dibujo elevado se produce cuando se representan varios objetos, pero no se muestran en la pantalla, ya que están ocultos por un objeto ocluido. Imagine mirar una pared que tiene objetos detrás de él. Toda la geometría se procesaría para la representación, pero solo se debe representar la pared opaca, 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:

  1. Determinar qué vértices se deben dibujar y dónde se encuentran en el espacio de pantalla (el sombreador de vértices)
    • El sombreador de vértices se ejecuta por vértice para cada malla.
  2. Determinar el color de cada píxel (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
  • Use el filtrado bilineal, siempre que sea posible.
  • Reorganizar expresiones para usar intrínsecos MAD para realizar una multiplicación y agregar al mismo tiempo
  • Precalcular tanto como sea posible en la CPU y pasar como constantes al material
  • Favorecer las operaciones de movimiento del 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 de 921 600 píxeles, 1080p es de 2.073.600 píxeles, etc.)

Eliminación de fases de GPU

Los efectos posteriores al procesamiento pueden ser costosos y aumentar la velocidad de relleno de la aplicación, incluidas las técnicas anti-aliasing 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 provocar 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, se asigna un grupo grande de objetos idénticos y se reutilizan instancias disponibles inactivas 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 en una aplicación.

Consulte también