Creación de experiencias de VR envolventes y fotorrealistas con el canal de renderizado de alta definición

Oficialmente, llevaremos la realidad virtual al canal de renderizado de alta definición (HDRP). En las versiones 2019.3.6f1 y posteriores, con la versión 7.3.1 del paquete, el HDRP ahora está verificado y se puede utilizar en VR.
Esta publicación de blog se sumerge técnicamente en el uso de HDRP en tu proyecto de VR. Para aprender más sobre todas las posibilidades que ofrece HDRP, echa un vistazo a esta publicación de blog.
VR en HDRP está diseñado para que:
Todas las características de HDRP son compatibles con VR.
HDRP es totalmente compatible con el nuevo Marco de Plugins XR de Unity.
El renderizado de un solo pase (instanciación) es la solución de renderizado predeterminada y recomendada para VR.
Al usar HDRP para un proyecto de VR, puedes aprovechar todas las características del canal de renderizado para crear experiencias limitadas solo por tu imaginación. Con sus técnicas de renderizado de vanguardia, HDRP puede ofrecer visuales impresionantes y fotorrealistas a una calidad rara vez vista antes en entornos de realidad virtual.
Aquí tienes un resumen muy rápido de las características disponibles para tus proyectos de VR:
- Renderizado diferido y directo
- Todos los tipos de luz, sombras, calcomanías y volumétricos
- Efectos de espacio de pantalla
- Oclusión ambiental (AO)
- Reflexión en espacio de pantalla (SSR)
- Dispersión subsuperficial (SSS)
- Distorsión y refracción
- Posprocesamiento
- Corrección de color, anti-aliasing, profundidad de campo, etc.
- Todos los VFX del Visual Effect Graph
VR para HDRP está actualmente disponible para las siguientes plataformas y dispositivos:
- Oculus Rift y Rift S (Oculus XR Plugin, Windows 10, DirectX 11)
- Windows Mixed Reality (Windows XR Plugin, Windows 10, DirectX 11)
- PlayStationVR
OpenVR: Valve está desarrollando actualmente su OpenVR Unity XR Plugin para 2019.3 y versiones posteriores, y estará disponible pronto.
técnicas de renderizado estereoscópico
Una implementación nativa de VR procesará todo dos veces, una vez para cada ojo. Llamamos a esta solución renderizado multipass. HDRP soporta renderizado multipass, sin embargo, no recomendamos este método porque tu aplicación utilizará el doble de potencia de CPU para renderizar, esencialmente duplicando tu número de llamadas de dibujo. Además, las sombras se renderizarán dos veces y podrían consumir una parte significativa de tu presupuesto de GPU.
Dicho esto, hay algunos casos en los que usar multipass es apropiado:
- Si tu sistema tiene una pequeña cantidad de memoria GPU, multipass utiliza menos memoria para los objetivos de renderizado que el renderizado de paso único.
- Si por alguna razón necesitas renderizar puntos de vista muy diferentes para cada ojo.
Una solución más rápida es usar renderizado de paso único (instanciado). En este modo, cada llamada de dibujo se renderiza simultáneamente para ambos ojos. Esto se logra utilizando un arreglo de texturas para los objetivos de renderizado y llamadas de dibujo instanciadas. Además, el culling y las sombras se procesan solo una vez por cuadro.
HDRP ha sido diseñado para que todas las características sean compatibles con VR y optimizadas para renderizado de paso único.
La decisión clave de diseño fue usar un arreglo de texturas para todos los objetivos de renderizado (incluso cuando no estás creando para VR). Esta decisión, junto con macros de shader, nos ha permitido crear shaders que son automáticamente compatibles con VR, aparte de algunos casos especiales (por ejemplo, generación de lista de luces, sombreado diferido de mosaicos indirectos, iluminación volumétrica y renderizado relativo a la cámara).
Ten en cuenta que el renderizado de paso único para texturas de doble ancho no es compatible con HDRP debido a la complejidad adicional y la sobrecarga requerida para todos los pases y efectos de pantalla completa.
Para comenzar con HDRP VR, consulta la sección Descripción general de VR en la documentación de Unity. Para ayudarte a configurar HDRP con VR, también proporcionamos un Asistente HDRP, que valida tus configuraciones y puede ayudarte a corregir cualquier configuración que el Asistente identifique como incorrecta.

Para configurar tu proyecto para VR manualmente utilizando el nuevo marco de plugin XR, consulta la documentación. Para configurar el renderizado de paso único, debes tener ambas configuraciones del proyecto establecidas en modo de renderizado estéreo de paso único y las configuraciones del activo HDRP establecidas en Paso Único. HDRP predeterminará a multipaso si alguna de esas dos opciones no está habilitada para paso único.

Anti-aliasing
Reducir el aliasing es extremadamente importante en VR para crear una gran experiencia de usuario y evitar romper la inmersión del entorno virtual. HDRP proporciona varias soluciones para ayudar con el anti-aliasing.
Los modos de anti-aliasing de la cámara se describen en detalle en la documentación de Unity. Estas opciones incluyen:
- El Anti-Aliasing por Multisampling (MSAA) es compatible con el renderizado hacia adelante. Puedes equilibrar calidad versus rendimiento eligiendo el número de muestras (2x, 4x, 8x). Esta técnica puede lograr grandes resultados, pero también puede ser costosa.
- El Anti-Aliasing Temporal es probablemente la mejor solución para la mayoría de las aplicaciones. Es muy efectivo para reducir el aliasing, pero puede difuminar algunos detalles. Puedes contrarrestar este desenfoque con el control de filtro de nitidez incluido.
- Soluciones algo más baratas incluyen el Anti-Aliasing Aproximado Rápido (FXAA) o el Anti-Aliasing Morfológico Subpíxel (SMAA).
- También es posible combinar MSAA con TAA, FXAA o SMAA. Esta técnica mejora la calidad visual, pero el costo es acumulativo.
- También hay anti-aliasing de sombreado adicional disponible por material con Anti-Aliasing Especular Geométrico, que puedes ajustar directamente en los materiales. Su uso se recomienda para superficies suaves y densas.
Rendimiento
El renderizado en VR es extremadamente exigente debido a la mayor tasa de refresco y resolución requeridas para mostrar a ambos ojos. Asegúrate de desactivar cualquier función que no necesites en la configuración del activo HDRP. Funciones como Volumétrico no son adecuadas para aplicaciones de VR ya que su rendimiento no cumple con los 90 fps requeridos a pesar de estar soportadas. Monitorear y perfilar el rendimiento con frecuencia te ayudará a identificar cualquier cuello de botella en tu proyecto.
Ten en cuenta que, por defecto, la precisión de los efectos volumétricos (rebanadas z) en VR se reducirá a la mitad para mantener el rendimiento de la GPU más aceptable. Además de iluminación volumétrica, se recomienda encarecidamente desactivar el soporte de Luz de Área HDRP al hacer un proyecto de VR. A diferencia de otras funciones, la Luz de Área debe ser desactivada a través de los archivos de configuración de shader.
Hay dos métodos de renderizado disponibles en HDRP, que también impactan el rendimiento: Modo de Shader Iluminado Adelante y Diferido. Para aprender sobre las diferencias entre esos dos modos, consulte la documentación. Elegir el modo adecuado para VR depende de los requisitos del proyecto. El renderizado hacia adelante le permite habilitar MSAA y reducir el uso de memoria, mientras que el renderizado diferido es más eficiente para proyectos con un gran número de luces, pero también consume más memoria.
Otro factor que influye en el rendimiento de la GPU es la resolución del búfer de renderizado. Esta resolución se establece inicialmente mediante el complemento de visualización XR y depende del casco que esté utilizando. Luego puede ajustar la resolución en su aplicación o utilizar la función de resolución dinámica para ajustar la resolución según el contexto de la escena actual. Por ejemplo, la resolución podría adaptarse según el tiempo de fotograma actual de la GPU.
Para más consejos, consulte esta charla de HDRP VR de Unite 2019 Copenhague.
Para admitir VR en HDRP, hemos agregado un conjunto de macros de sombreado para ayudar a manejar la instanciación de vista y el uso de arreglos de texturas para el objetivo de renderizado. Por ejemplo, puede declarar una textura en un sombreado con el siguiente código:
TEXTURE2D_X(MyTexture);
En plataformas que admiten arreglos de texturas, esta macro se expandirá a TEXTURE2D_ARRAY. Si la plataforma no admite arreglos de texturas o si la configuración en ShaderConfig.cs está deshabilitada, la macro se expandirá a TEXTURE2D regular. Características similares están disponibles para el muestreo de texturas.
En el lado del sombreado, las constantes de vista adecuadas (matriz de vista, matriz de proyección, etc.) se almacenan en el arreglo e indexan según el índice del ojo, que se deriva del instanceID de los primitivos. En el caso de los sombreadores de cómputo, la dimensión de despacho z se utiliza para identificar cada ojo. La macro UNITY_XR_ASSIGN_VIEW_INDEX se utiliza generalmente para asignar el índice de ojo adecuado.
Las versiones futuras de HDRP VR se centrarán en:
- Mejorando el rendimiento con nuevas opciones de hardware como el sombreado de tasa variable
- Mejorando el soporte de la plataforma con Vulkan y DX12
- Mejorando el soporte de dispositivos
- Extendiendo el pase único para soportar más de dos vistas
Puede comenzar a aprovechar HDRP VR hoy. Nos encantaría escuchar sus comentarios en el foro de HDRP mientras continuamos haciendo mejoras.
