Debido a los exigentes requisitos de renderizado, RE requiere una serie de optimizaciones de rendimiento y se han introducido en Unreal Engine (UE) nuevos modos de renderizado que son específicos de RE. En el siguiente documento, echaremos un vistazo a estas funciones y te diremos cómo usarlas en tus proyectos de RE en UE.
Sombreado de tasa variable y renderizado foveado fijo
El sombreado de tasa variable (VRS) es una función compatible con las GPU más recientes que proporciona varios métodos para ajustar la tasa de sombreado de los píxeles en un objetivo (u objetivos) de renderizado. La tasa de sombreado por defecto en cualquier configuración es 1:1, donde 1 invocación de sombreador de píxeles se aplica a 1 pixel objetivo en la pantalla. Con VRS, puedes especificar tasas de sombreado alternativas, concretamente 1x2, 2x1, 2x2, 2x4, 4x2 y 4x4. Por ejemplo, para una tasa de sombreado de 2x2, verías una sola invocación de sombreador de píxeles para un grupo de 2x2 píxeles (4 píxeles) y para 4x4 verías una única invocación de sombreador de píxeles para un grupo 4x4 (16 píxeles).
La tasa de sombreado puede aplicarse a cada material o mediante una imagen de tasa de sombreado (con VRS Tier 2).
El renderizado foveado fijo es una técnica que puede usar el VRS basado en imágenes de los visores de RV para ajustar la tasa de sombreado de un objetivo, reduciendo la tasa de sombreado hacia la periferia de la vista. Debido a la distorsión óptica, la GPU acaba desperdiciando cantidades cada vez mayores de detalles de píxeles hacia el borde de la imagen, por lo que si aplicas una imagen VRS que reduzca la tasa de sombreado más allá del centro de la imagen, puedes mejorar el rendimiento con una degradación de la percepción mínima en la calidad de la imagen.
El foveado fijo usa una vinculación generada a través de un sombreador computacional:
Las áreas centrales (negras) a ambos lados corresponden al centro de cada vista en estéreo; las áreas más oscuras muestran una mayor tasa de sombreado. El negro es completo (1x1, 1 invocación del sombreador por pixel), el rojo oscuro está a la mitad de la tasa tanto en x como en y (2x2, 1 invocación del sombreador por 4 píxeles) y el rojo más claro se encuentra a un cuarto de la tasa (4x4, 1 invocación del sombreador de píxeles por cada 16 píxeles).
Los resultados iniciales con uniones de VRS aplicadas al pase base y a los pases de transparencia son bastante prometedores. De momento, sigue siendo una prueba de concepto y podría aplicarse en otros sitios distintos de los pases base y de transparencia.
Configuración del proyecto
Para acceder a los ajustes de VRS, desde el menú principal, ve a Editar > Configuración del proyecto. Después, en la ventana Configuración del proyecto, ve a Motor > Renderizado > RV.
Variables de la consola
Puedes usar las siguientes variables de consola:
| Variable | Descripción |
|---|---|
r.vrs.Enable | Activa o desactiva VRS en todo el motor (VRS basado en materiales y cualquier VRS activo basado en imágenes). |
r.VRS.EnableImage | Activa o desactiva solo el VRS basado en imágenes. El VRS por material seguirá funcionando si está activado y es compatible. |
vr.VRS.HMDFixedFoveationLevel | Ajuste de rendimiento y calidad de renderizado foveado fijo HMD. |
vr.VRS.HMDFixedFoveationDynamic | Activa o desactiva si el nivel de foveado fijo debe ajustarse en función del uso de la GPU. |
Limitaciones conocidas
Solo está disponible en dispositivos Windows con DirectX 12 y VRS Tier 2, dispositivos Windows con Vulkan y la extensión VK_KHR_fragment_shading_rate, y Oculus Quest.
No es compatible con DLSS de NVIDIA.
Actualmente no es compatible con el renderizado foveado de seguimiento ocular.
Estéreo instanciado
El renderizado estéreo con instancias reduce el impacto del rendimiento de RE en UE. Activa esta función desde Configuración del proyecto > Motor > Renderizado > Estéreo instanciado y luego marca la opción Estéreo instanciado.
Después de activar el renderizado en estéreo instanciado será necesario reiniciar el motor y recompilar los sombreadores. El pase base y el pase z temprano funcionan con mallas estáticas, mallas esqueléticas, partículas de sprite y partículas de malla con la función activada (tanto rutas de renderizado en serie como en paralelo). Estéreo instanciado actualmente funciona en PC (DirectX) y PS4, y será compatible con otras plataformas después del lanzamiento inicial de la versión 4.11. Aquí puedes ver un vídeo que muestra el renderizado en estéreo estándar en RV en contraposición con el renderizado en estéreo instanciado en RV.
Soporte multivista para dispositivos móviles
Ciertos dispositivos móviles (compatibles) ahora son compatibles con multivista RV. La multivista en dispositivos móviles es similar al renderizado en estéreo instanciado disponible para ordenadores de sobremesa. Funciona proporcionando una ruta optimizada para el renderizado en estéreo en la CPU del dispositivo móvil. Para habilitar esta función, deberás hacer lo siguiente:
En la barra de herramientas principal, ve a Editar > Configuración del proyecto para abrir la configuración del proyecto del editor.
Después, ve a Motor > Renderizado > RV y localiza la opción Multivista en móvil.
Habilita la opción Multivista en móvil y reinicia Unreal Engine para que los cambios surtan efecto.
La función Multivista en móvil solo funciona con GPU modernas basadas en Mali.
Esta función se desactiva en tiempo de ejecución si empaquetas este proyecto pero no tienes una GPU compatible.
Renderizado directo
By default, Unreal Engine uses a Deferred Renderer as it provides the most versatility and grants access to more rendering features. However, there are some trade-offs in using the Deferred Renderer that might not be right for all VR experiences. Forward Rendering provides a faster baseline, with faster rendering passes, which may lead to better performance on VR platforms. Not only is Forward Rendering faster, it also provides better anti-aliasing options than the Deferred Renderer, which may lead to better visuals.
Para obtener más información sobre esta función, consulta Forward Shading Renderer en la documentación.
Generación de perfiles de rendimiento
Para rastrear recursos que son demasiado costosos para RV, necesitas generar perfiles de lo que está haciendo tu proyecto en la CPU y la GPU tanto como sea posible a lo largo de su vida útil.
Perfilado de GPU - Para activar el perfilador de GPU, todo lo que tienes que hacer es pulsar Ctrl + Mayús + (coma) al mismo tiempo mientras se ejecuta el proyecto. Después de pulsar las teclas, verás aparecer una nueva ventana similar a la imagen de abajo.
Perfilador de CPU - Generar perfiles de lo que hace tu proyecto en la CPU es un poco más complicado que hacerlo para la GPU. Para obtener más información al respecto, consulta los documentos sobre el perfilador de rendimiento.
Ajustes de postproceso
Debido a los exigentes requisitos de renderizado de la RV, muchas de las funciones avanzadas de posprocesamiento que vienen activadas por defecto deberían estar desactivadas; de lo contrario, tu proyecto podría verse afectado por problemas de rendimiento. Para lograr esto en tu proyecto, tendrás que hacer lo siguiente.
1. Añade un volumen de posprocesamiento (PP) a tu nivel si aún no lo hay. 1. Selecciona el volumen PP y, en la sección Volumen de posprocesamiento, activa la opción Alcance infinito (sin límites) para que los ajustes del volumen PP se apliquen a todo el nivel.
![Habilita la opción saliente para el volumen de posprocesamiento(enable-unbound-post-process-volume.png)
1. Expande los ajustes del volumen de posprocesamiento, y luego repasa cada sección para desactivar cualquier ajuste de PP activo activando esa propiedad haciendo clic en ella y luego ajustando el valor por defecto (normalmente 1.0) en 0 para deshabilitar de este modo la función.
Al hacerlo, no tendrás que pasar por todas las secciones y establecer todas las propiedades en 0. En su lugar, desactiva primero las funciones más exigentes, como los reflejos de la lente, los reflejos del espacio en pantalla, AA temporal, SSAO, el bloom y cualquier otra función que pueda tener un impacto en el rendimiento.