Procedimientos recomendados de la aplicación OpenXR

Puede ver un ejemplo de los procedimientos recomendados siguientes en el archivo OpenXRProgram.cpp de BasicXrApp. La función Run() al principio captura un flujo de código de aplicación OpenXR típico desde la inicialización hasta el bucle de representación y eventos.

Procedimientos recomendados para la calidad visual y la estabilidad

Los procedimientos recomendados de esta sección describen cómo obtener la mejor calidad visual y estabilidad en cualquier aplicación OpenXR.

Para obtener más recomendaciones de rendimiento específicas de HoloLens 2, consulte la sección Procedimientos recomendados para el HoloLens 2 a continuación.

Representación gamma correcta

Debe tener cuidado para asegurarse de que la canalización de representación es gamma correcta. Al representar en una cadena de intercambio, el formato de vista render-target debe coincidir con el formato de cadena de intercambio. Por ejemplo, DXGI_FORMAT_B8G8R8A8_UNORM_SRGB para el formato de cadena de intercambio y la vista render-target. Hay una excepción si la canalización de representación de la aplicación realiza una conversión manual de sRGB en el código del sombreador. La aplicación debe solicitar un formato de cadena de intercambio sRGB, pero usar el formato lineal para la vista render-target. Por ejemplo, solicite como formato de cadena de intercambio, pero use como vista render-target para evitar que se corrija el DXGI_FORMAT_B8G8R8A8_UNORM_SRGBDXGI_FORMAT_B8G8R8A8_UNORM contenido de doble gamma.

Enviar búfer de profundidad para capas de proyección

Use siempre XR_KHR_composition_layer_depth la extensión y envíe el búfer de profundidad junto con la capa de proyección al enviar un fotograma a xrEndFrame . Habilitar la reproducción de profundidad de hardware HoloLens 2 mejora la estabilidad del holograma.

Elección de un intervalo de profundidad razonable

Prefiere un intervalo de profundidad más reducido para limitar el ámbito del contenido virtual para ayudar a la estabilidad del holograma en HoloLens. Por ejemplo, el ejemplo OpenXrProgram.cpp usa de 0,1 metros a 20 metros. Use reversed-Z para obtener una resolución de profundidad más uniforme. En HoloLens 2, el uso del formato de profundidad preferido le ayudará a mejorar la velocidad de fotogramas y el rendimiento, aunque los búferes de profundidad de 16 bits proporcionan menos resolución de profundidad que los búferes de profundidad de DXGI_FORMAT_D16_UNORM 24 bits. Seguir estos procedimientos recomendados para hacer un mejor uso de la resolución de profundidad es más importante.

Preparación para distintos modos de combinación de entorno

Si la aplicación también se ejecutará en cascos envolventes que bloquean completamente el mundo, asegúrese de enumerar los modos de mezcla de entorno compatibles mediante la API y prepare el contenido de representación xrEnumerateEnvironmentBlendModes correctamente. Por ejemplo, para un sistema con como el HoloLens, la aplicación debe usar transparente como color claro, mientras que para un sistema con , la aplicación debe representar algún color opaco o alguna sala virtual en segundo XR_ENVIRONMENT_BLEND_MODE_ADDITIVEXR_ENVIRONMENT_BLEND_MODE_OPAQUE plano.

Elección del espacio de referencia sin enlazar como espacio raíz de la aplicación

Las aplicaciones suelen establecer un espacio de coordenadas del mundo raíz para conectar vistas, acciones y hologramas. Use cuando se admite la extensión para establecer un sistema de coordenadas a escala mundial, lo que permite a la aplicación evitar el desvío de hologramas no deseados cuando el usuario se mueve lejos XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT (por ejemplo, a 5 metros de distancia) desde donde se inicia la aplicación. XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT Use como reserva si la extensión de espacio sin XR_REFERENCE_SPACE_TYPE_LOCAL enlazar no existe.

Asociación de hologramas con delimitadores espaciales

Cuando se usa un espacio de referencia sin enlazar, los hologramas que se coloquen directamente en ese espacio de referencia pueden desviar a medida que el usuario se desplaza a salas lejanas y, a continuación, vuelve. Para que los usuarios del holograma coloquen en una ubicación discreta del mundo, cree un delimitador espacial mediante la función de extensión y coloque el holograma en su origen. Esto mantendrá ese holograma independientemente estable con el tiempo.

Compatibilidad con la captura de realidad mixta

Aunque la pantalla principal de HoloLens 2 usa la combinación de entornos aditivos, cuando el usuario inicia la captura de realidad mixta,el contenido de representación de la aplicación se mezclará alfa con la secuencia de vídeo del entorno. Para lograr la mejor calidad visual en los vídeos de captura de realidad mixta, es mejor establecer en la capa XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT de proyección layerFlags .

Procedimientos recomendados para el rendimiento en HoloLens 2

Como dispositivo móvil con compatibilidad con la reproducción de hardware, HoloLens 2 requisitos más estrictos para obtener un rendimiento óptimo. Hay varias maneras de enviar datos de composición a través de , lo que da como resultado un procesamiento posterior con una notable disminución del rendimiento.

Selección de un formato de cadena de intercambio

Enumere siempre los formatos de píxel admitidos mediante y elija el primer formato de píxel de color y profundidad del tiempo de ejecución que admite la aplicación, porque eso es lo que prefiere el tiempo de ejecución para obtener un xrEnumerateSwapchainFormats rendimiento óptimo. Tenga en cuenta que HoloLens 2 DXGI_FORMAT_B8G8R8A8_UNORM_SRGB y suele ser la primera opción para lograr un mejor rendimiento de la DXGI_FORMAT_D16_UNORM representación. Esta preferencia puede ser diferente en los cascos vr que se ejecutan en un equipo de escritorio, donde los búferes de profundidad de 24 bits tienen menos impacto en el rendimiento.

Advertencia de rendimiento: El uso de un formato distinto del formato de color de la cadena de intercambio principal dará lugar al procesamiento posterior en tiempo de ejecución, lo que produce una reducción significativa del rendimiento.

Represente siempre con el ancho y alto recomendados de la configuración de vista ( y desde ) y use siempre la API para consultar la posición de vista recommendedImageRectWidthrecommendedImageRectHeightXrViewConfigurationView recomendada, fov y otros parámetros de representación antes de la xrLocateViews representación. Use siempre de XrFrameEndInfo.predictedDisplayTime la llamada más reciente al consultar las poses y las xrWaitFrame vistas. Esto permite HoloLens la representación y optimizar la calidad visual de la persona que lleva el HoloLens.

Uso de una sola capa de proyección

HoloLens 2 capacidad de GPU limitada para representar contenido y un compositor de hardware optimizado para una sola capa de proyección. El uso siempre de una sola capa de proyección puede ayudar a la velocidad de fotogramas, la estabilidad del holograma y la calidad visual de la aplicación.

Advertencia de rendimiento: El envío de cualquier cosa menos una sola capa de protección dará como resultado un procesamiento posterior en tiempo de ejecución, lo que produce una reducción significativa del rendimiento.

Representación con matriz de texturas y VPRT

Cree uno para los ojos izquierdo y derecho mediante para la cadena de intercambio de colores y otro xrSwapchainarraySize=2 para la profundidad. Represente el ojo izquierdo en el segmento 0 y el ojo derecho en el segmento 1. Use un sombreador con VPRT y llamadas de dibujo con instancias para la representación estereomática para minimizar la carga de GPU. Esto también permite que la optimización del entorno de ejecución alcance el mejor rendimiento en HoloLens 2. Las alternativas al uso de una matriz de texturas, como la representación de doble ancho o una cadena de intercambio independiente por ojo, darán lugar al procesamiento posterior en tiempo de ejecución, lo que produce una reducción significativa del rendimiento.

Evitar las capas de cuatro niveles

En lugar de enviar capas de cuatro capas como capas de composición con XrCompositionLayerQuad , represente el contenido de cuatro elementos directamente en la cadena de intercambio de proyección.

Advertencia de rendimiento: Si se proporcionan capas adicionales más allá de una sola capa de proyección, como las de cuatro capas, se provocará un procesamiento posterior en tiempo de ejecución, lo que conlleva una reducción significativa del rendimiento.