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 típico de la aplicación OpenXR de la inicialización al bucle de representación y evento.

Procedimientos recomendados para la calidad visual y la estabilidad

Los procedimientos recomendados de esta sección describen cómo obtener la mejor calidad y estabilidad visual 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 rendimiento en HoloLens 2 a continuación.

Representación de gamma-correct

Se 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 la cadena de intercambio. Por ejemplo, DXGI_FORMAT_B8G8R8A8_UNORM_SRGB para el formato de la cadena de intercambio y la vista de destino de representación. Hay una excepción si la canalización de representación de la aplicación realiza una conversión sRGB manual 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 de destino de representación. Por ejemplo, solicite DXGI_FORMAT_B8G8R8A8_UNORM_SRGB como formato de cadena de intercambio, pero use DXGI_FORMAT_B8G8R8A8_UNORM como vista de destino de representación para evitar que el contenido se corrija de doble gamma.

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

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

Elección de un intervalo de profundidad razonable

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

Preparación para diferentes modos de combinación de entornos

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

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

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

Asociación del holograma con el delimitador espacial

Cuando se usa un espacio de referencia sin enlazar, los hologramas que colocas directamente en ese espacio de referencia pueden desfase a medida que el usuario camina a las salas distantes y vuelve. Para los usuarios de hologramas se colocan en una ubicación discreta del mundo, cree un delimitador espacial mediante la función de xrCreateSpatialAnchorSpaceMSFT extensión y coloque el holograma en su origen. Esto mantendrá ese holograma de forma independiente 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 combinará 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 XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT capa de layerFlagsproyección.

Procedimientos recomendados para el rendimiento en HoloLens 2

Como dispositivo móvil con compatibilidad con la reproyecto de hardware, HoloLens 2 tiene requisitos más estrictos para un rendimiento óptimo. Hay varias maneras de enviar datos de composición a través de , lo que da lugar a un procesamiento posterior con una penalización de rendimiento notable.

Seleccionar un formato de cadena de intercambio

Enumera siempre los formatos de píxeles admitidos mediante xrEnumerateSwapchainFormatsy elige el primer formato de píxel de color y profundidad del tiempo de ejecución que admite la aplicación, ya que eso es lo que prefiere el tiempo de ejecución para obtener un rendimiento óptimo. Tenga en cuenta que, en HoloLens 2, DXGI_FORMAT_B8G8R8A8_UNORM_SRGB y DXGI_FORMAT_D16_UNORM suele ser la primera opción para lograr un mejor rendimiento de 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 a un procesamiento posterior en tiempo de ejecución, lo que supone una penalización significativa del rendimiento.

Siempre se representa con el ancho y alto de configuración de vista recomendado (recommendedImageRectWidth y recommendedImageRectHeight desde XrViewConfigurationView) y siempre usa xrLocateViews la API para consultar la posición de vista recomendada, FOV y otros parámetros de representación antes de la representación. Use siempre desde XrFrameEndInfo.predictedDisplayTime la llamada más reciente xrWaitFrame al consultar las posturas y las vistas. Esto permite a HoloLens ajustar la representación y optimizar la calidad visual de la persona que usa HoloLens.

Uso de una sola capa de proyección

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

Advertencia de rendimiento: El envío de cualquier cosa, excepto una sola capa de protección, dará lugar a un procesamiento posterior al tiempo de ejecución, lo que conlleva una penalización significativa del rendimiento.

Representación con matriz de texturas y VPRT

Cree uno xrSwapchain para el ojo izquierdo y derecho mediante arraySize=2 para la cadena de intercambio de colores y otro para 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 de instancias para la representación estereoscópica para minimizar la carga de GPU. Esto también permite que la optimización del tiempo de ejecución logre 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 a un procesamiento posterior al tiempo de ejecución, lo que conlleva una penalización significativa del rendimiento.

Evitar las capas cuádruples

En lugar de enviar capas cuádruples como capas de composición con XrCompositionLayerQuad, represente el contenido cuádruple directamente en la cadena de intercambio de proyección.

Advertencia de rendimiento: Proporcionar capas adicionales más allá de una sola capa de proyección, como las capas cuádruples, dará como resultado el posprocesamiento en tiempo de ejecución, lo que conlleva una penalización significativa del rendimiento.