Lumen introduce la iluminación global en tiempo real en el capítulo 4 de Fortnite Battle Royale

Daniel Wright, miembro del equipo de ingeniería de Gráficos y Krzysztof Narkowicz, director técnico de Gráficos |
26 de enero de 2023
Hola: somos Daniel Wright y Krzysztof Narkowicz, ingenieros de Lumen. Lumen es el sistema de iluminación global y de reflejos totalmente dinámico de Unreal Engine 5, y viene activado por defecto. En esta publicación de blog explicaremos cómo funciona Lumen en el capítulo 4 de Fortnite Battle Royale y destacaremos las mejoras que el equipo realizó en Lumen para el lanzamiento del capítulo 4, ya disponibles para todos los desarrolladores en Unreal Engine 5.1. También escribimos una publicación en el blog de tecnología para presentar Lumen, recomendamos su lectura para ver una descripción general del sistema.

El capítulo 4 de Fortnite Battle Royale viene con Lumen activado para Playstation 5, Xbox Series X y Xbox Series S. Lumen también estará activo en PC y para juegos en la nube, siempre que la configuración de calidad del apartado Iluminación global se establezca como «Alta» o «Épica», con la posibilidad de usar el trazado de rayos (ray tracing) de hardware para una calidad aún mayor dentro de lo que soporte la tarjeta gráfica.
 

Lumen en el capítulo 4 de Fortnite Battle Royale

Antes del capítulo 4, Fortnite estaba limitado a las tecnologías de iluminación dinámica de Unreal Engine 4 en las consolas de nueva generación. Para la luz ambiental, solo se usaba la función de oclusión ambiental de la distancia de campo, lo que provocaba que los interiores tuvieran un aspecto frío por la filtración de la luz cenital azul en los edificios. En el capítulo 4, Lumen calcula la iluminación global en alta calidad, trayendo de vuelta la luz solar cálida y las sombras indirectas detalladas.
Oclusión ambiental de la distancia de campo comparada con la iluminación global de Lumen. La función de autoexposición se activa junto con la iluminación global de Lumen.
Con una iluminación global precisa, los espacios interiores se vuelven bastante más oscuros que los exteriores, puesto que la luz cenital queda bloqueada. De ahí que sea necesario que la exposición automática esté activada.

En versiones anteriores de Fortnite, los reflejos presentes en consolas de nueva generación no eran más que reflejos del espacio en pantalla (Screen Space Reflections o SSR). Este efecto solo puede reflejar lo que aparece en pantalla, pero esto consigue evitar que la luz cenital se filtre estando dentro de un edificio. Además, los SSR solo ofrecen buenos resultados en superficies tipo espejo, por lo que faltaría añadir los reflejos borrosos. Los artistas de Fortnite habían estado intentado superar estas limitaciones evitando casi por completo los reflejos especulares en materiales usados en interiores. La función Reflejos de Lumen proporciona reflejos precisos con trazado de rayos sobre superficies brillantes, lo que hace que las superficies metálicas y lisas se reproduzcan correctamente, incluso en interiores. De este modo, los artistas pueden ver cómo responde el material a la iluminación en tiempo real de principio a fin.
Reflejos del espacio en pantalla frente a reflejos de Lumen sobre hielo.
Los Reflejos de Lumen también prevalecen en el agua, con la diferencia de que ahí son mucho más nítidos que los SSR y no se limitan a reflejar lo que se ve en pantalla.
Reflejos del espacio en pantalla frente a reflejos de Lumen en el agua.
Fortnite Battle Royale tiene muchos eventos de juego que requieren iluminación dinámica: la hora del día cambia, los jugadores pueden construir y destruir estructuras o abrir puertas, etc. Lumen es totalmente dinámico y reacciona a estos cambios en tiempo real. A pesar de que Lumen amortiza los cálculos entre fotogramas para reducir el trabajo de procesado, la tasa de fotogramas por segundo a la que suele ir Fortnite es tan alta que los artefactos de acumulación temporal son mínimos.

El camino hasta el capítulo 4

Al rematar el trabajo para el lanzamiento de Unreal Engine 5.0, nos centramos en el capítulo 4 de Fortnite Battle Royale y en los desafíos que planteaba. La intención de Fortnite es llegar al mínimo de 60 fps en consolas, lo que supone que un fotograma dura tan solo 16,67 milisegundos, puede que incluso menos con margen para la resolución dinámica y los costes de juego en los momentos de combate. Teniendo en cuenta todas las características de renderizado que necesitamos, solo íbamos a tener cuatro milisegundos para combinar los reflejos y la iluminación global dinámica. Este margen es extremadamente pequeño, ya que, normalmente, los juegos triple A necesitan cuatro milisegundos solo para aplicar reflejos con trazado de rayos. Íbamos a tener que hacer tantas optimizaciones como fuese posible sin comprometer la calidad de la iluminación de nueva generación.

Lo primero que tuvimos que decidir fue qué método de trazado de rayos usaríamos para el capítulo 4 de Fortnite Battle Royale. Ya habíamos lanzado The Matrix Awakens: una experiencia en Unreal Engine 5 con Lumen, usando trazado de rayos de hardware en consolas tras haber realizado importantes optimizaciones. No obstante, esa demo técnica tenía un objetivo de 30 fps. Tras algunas pruebas iniciales, y puesto que tenía unos costes de trazado más bajos, determinamos que el trazado de rayos de software de Lumen debía alcanzar los 60 fps. Sin embargo, la naturaleza aproximada de trazado de rayos mediante software presentaba varios desafíos, sobre todo en lo que respecta a la calidad del follaje y a los reflejos en el agua.

El capítulo 4 de Fortnite Battle Royale contiene bosques y colinas repletas de hierba. Ninguno de los proyectos anteriores en los que introdujimos Lumen tenía una cantidad de follaje importante, por lo que aún no habíamos tenido la oportunidad de trabajar en esto. Uno de los grandes problemas fue la excesiva oclusión presente en el follaje.

El trazado de rayos mediante software de Lumen utiliza una distancia de campo con signo global para representar las superficies de la escena. Las distancias de campo con signo solo pueden representar una superficie opaca, y el ray marching (marcha de rayos) otorga un resultado binario: o bien hay impacto o no lo hay. Esto provoca una gran sobreoclusión en las mallas de follaje, las cuales se modelan como aglomerados. Por ello, desarrollamos una nueva forma de entrelazar distancias de campo con signo. Consistía en que, en cada paso de la marcha de rayos, se decidiese si iba a entrelazarse o no. De este modo se convirtió en una técnica estocástica y nos permitió modelar con mayor precisión la geometría agregada al tiempo que manteníamos la representación de la distancia de campo con signo que funcionaba bien para el resto de la escena.
Sobreoclusión en el follaje resuelta con intersecciones de distancia de campo estocástica semitransparente.
Otros problemas resultaron más fáciles de resolver. Lumen usa el trazado en pantalla para añadir detalles donde el trazado de rayos mediante software no es tan efectivo, pero la hierba tiene un nivel tan grande de detalle que estos trazados en pantalla aplican mucho aliasing. Para resolver el problema de los artefactos, la alternativa fue sencilla: evitar los impactos del trazado en pantalla contra el follaje.
El ruido excesivo de los trazados en pantalla sobre la hierba se resolvió omitiendo los impactos en el follaje.
Otro gran problema con el trazado de rayos mediante software fue la baja resolución de la iluminación que se almacenaba como caché en las superficies que se ven en los reflejos. Aunque Lumen guarda un caché de superficies con resoluciones bastante altas para que cada malla pueda dar iluminación de manera eficiente en los impactos de rayos, nosotros las fusionábamos en una representación voxelizada que resultó ser mucho más borrosa. Desarrollamos una estructura de búsqueda inversa que nos permitió muestrear el caché de superficies por malla directamente en los impactos de rayos. De este modo, obtuvimos una iluminación de emisión mucho más precisa y unos reflejos en el agua más nítidos.
Reflejos más nítidos con trazado de rayos mediante software, cuando los rayos toman muestras directamente de la memoria de caché de superficies de Lumen (trazado en pantalla desactivado para la visualización).
En cuanto a los reflejos en el agua, sufrimos artefactos de rayas verticales en cualquier punto en el que un objeto en primer plano interrumpiese el trazado en pantalla de Lumen. Este proceso resultaba muy molesto para un personaje en movimiento. Puesto que los trazados en pantalla de Lumen no reconocen el grosor que tiene un objeto, tenemos que cambiarnos al trazado de rayos mediante software para gestionar el resto del rayo, lo cual a menudo genera un color diferente. Esto resultó un paso atrás respecto a los reflejos del espacio en pantalla, los cuales usaban un método mucho menos exigente en cuanto a rendimiento, pero también bastante menos preciso para la intersección de rayos, aunque sí que permitía seguir el rayo detrás de los objetos en primer plano. Conseguimos poner solución a las rayas verticales muestreando el color de la pantalla, incluso en los impactos del trazado de rayos mediante software, reduciendo así el desajuste. Esta solución llegó en el último minuto, por lo que no podría formar parte del lanzamiento de UE 5.1. 
Las rayas verticales causadas por el desajuste entre el trazado en pantalla y el trazado de rayos mediante software se minimizan al muestrear el color de la pantalla en el momento en el que impacta el rayo.
Hubo otras mejoras de calidad que llegaron por sorpresa. La iluminación global de Lumen reduce la tasa de muestreo significativamente para ajustarse al margen disponible de cuatro milisegundos. Esto provoca que el ruido sea más perceptible y que interfiera en la experiencia del juego. Conseguimos reducir el ruido en gran medida al integrar la herramienta «Spatiotemporal Blue Noise» de NVIDIA, una técnica que optimiza previamente los patrones de ruido para cancelarlos rápidamente cuando se acumulan en varios fotogramas. Esta herramienta proporcionó una iluminación indirecta mucho más limpia sin necesidad de trazar más rayos.
Gracias al ruido azul espaciotemporal, la luz cenital que entra por una puerta contiene menos ruido.

Controles de la dirección artística

Los artistas ya tienen algunas herramientas para dirigir la luz indirecta directa, como la función «Intensidad de la iluminación indirecta» en la luz direccional. Los artistas de Fortnite usaron un valor de 2.0 para amplificar la iluminación de rebote y darle al juego una mayor sensación de calidez. Sin embargo, las zonas de interior presentaban un problema: cuando no había ventanas ni fuentes de luz cerca, con una iluminación global precisa, los interiores quedaban demasiado oscuros. Este problema provocaba grandes cambios de exposición al pasar de interior a exterior. Los artistas podrían evitar este asunto colocando más fuentes de luz, pero eso aumentaba los costes de sombreado.

Por ello, hemos desarrollado nuevos controles para modificar la iluminación indirecta de Lumen: La filtración de luz de SkyLight y el realce de color difuso en el volumen de posprocesado. Con la filtración de luz de SkyLight (Skylight leaking), se puede añadir una pequeña cantidad de luz ambiental en el interior y limitar así el rango de exposición. Por otra parte, con la función de realce de color difuso (Diffuse Color Boost), se puede amplificar la iluminación indirecta con rebote múltiple. Al contrario que la opción de añadir más luces, ninguna de estas dos estrategias implica un coste significativo para la GPU. Los artistas de Fortnite acabaron usando filtraciones de luz de SkyLight para evitar que los interiores estuviesen demasiado oscuros como para poder jugar en esas zonas.
La filtración de luz de SkyLight se usa para evitar que las zonas se oscurezcan por completo.
La iluminación global precisa crea una iluminación de alto contraste en la que ningún valor de exposición único funciona bien. Las áreas brillantes de la imagen (especialmente el cielo y cualquier superficie iluminada por el sol) se apagan, mientras que las áreas oscuras quedan subexpuestas. Unreal Engine 5.0 ha introducido una nueva característica llamada «Local Exposure», usada por los artistas de Fortnite para conservar los detalles de luces y sombras en unas condiciones de iluminación de HDR tan desafiantes.
Detalles de luces y sombras conservados con exposición local: una nueva característica en Unreal Engine 5.0. La exposición local siempre debe configurarse cuando se usa Lumen.

Rendimiento

Lumen se apoya en gran medida en el upsampling temporal con la superresolución temporal (TSR) de Unreal Engine 5 para lograr la resolución en 4K. La renderización interna a 1080p con superresolución temporal otorga la mejor calidad de imagen final posible, en lugar de ejecutar Lumen a 4K por defecto con ajustes de calidad significativamente más bajos.

Lumen puede configurarse para alcanzar los 60 fps en consolas de nueva generación. Para ello, hay que configurar los grupos de calidad de Iluminación global y Reflejos como «Alto» (High), a los que se puede acceder desde el perfil del dispositivo de la plataforma:

; Establecer la iluminación global de Lumen y la calidad del reflejo en Alto para conseguir 60 fps
+CVars=sg.GlobalIlluminationQuality=2
+CVars=sg.ReflectionQuality=2

La escala de la iluminación global de Lumen decrece al recortar la muestra aún más de lo normal, reduciéndola a 1/16 de rayo por píxel. Cuando se trazan tan pocos rayos, la iluminación indirecta se vuelve temporalmente menos estable y el ruido se nota más en las zonas oscuras. Para ocultar este incremento de ruido, podemos emplear la herramienta de filtración de luz de SkyLight.
Diferencia entre la configuración de 60 fps y de 30 fps en Lumen. Lumen captura mejor los pequeños detalles y es mucho más estable temporalmente con una configuración de 30 fps, lo que no es perceptible al comparar capturas de pantalla.
Durante nuestro trabajo en el capítulo 4 de Fortnite Battle Royale, aplicamos muchas optimizaciones menores a la iluminación global de Lumen. No obstante, la mejora más importante se produjo al pasar todo este método al proceso de computación asíncrona, con lo que se ganaron 0,8 milisegundos. Lumen contiene muchos emisores de computación para sus diversos algoritmos y, aunque entre ellos la GPU se queda inactiva durante un breve período, al final todo acaba sumando.

Además, los emisores del trazado de rayos tienden a tener largas colas, en las que unos pocos rayos tardan mucho más en completarse que el resto. Mover este trabajo al proceso de computación asíncrona permite que la GPU llene los huecos con el resto del trabajo del fotograma. De este modo, se hace un uso más eficaz de la potencia de procesamiento de la GPU. Con UE 5.2, la asincronía de Lumen (Async Lumen) estará activada por defecto para consolas, ya que hubo que realizar algunas correcciones que no se pudieron implementar a tiempo en UE 5.1.
Ahora el trabajo de Lumen se realiza en el proceso de computación asíncrona, lo que permite realizar un mejor uso de la potencia computacional de la GPU.
Los Reflejos de Lumen se reducen para cumplir la marca de 60 fps renderizando a la mitad de la resolución (excepto en el agua). La iluminación global de Lumen produce algunos reflejos borrosos, pero la función Reflejos de Lumen traza rayos adicionales para conseguir reflejos nítidos. El coste de los reflejos puede variar mucho, dependiendo del porcentaje de la pantalla que contenga materiales lo suficientemente pulidos como para necesitar rayos de reflexión. Una de las mayores optimizaciones (de uno a dos milisegundos) surgió de omitir los rayos de reflexión en el follaje con mayor frecuencia, puesto que ya tienen un coste más alto en «Base Pass» y en «Shadow Depths» y no han causado una pérdida de calidad notable.

La Xbox Series S representa un desafío especial. Cuenta con una GPU de cuatro teraflops, por lo que hacía falta una resolución interna más baja que con la Xbox Series X, que tiene doce teraflops. Sin embargo, eso no fue suficiente. No queríamos recurrir a la función de oclusión ambiental de distancia de campo, ya que esta opción cambia el aspecto de manera significativa. En su lugar, desarrollamos un modo en el que la iluminación global de Lumen proporciona reflejos borrosos y la función reflejos del espacio en pantalla se utiliza para los reflejos de efecto espejo. Hacer esto ahorra en torno a un milisegundo de tiempo ya que, aunque desactiva los Reflejos de Lumen, da buenos resultados visuales en comparación con lo que podría lograrse usando solo los Reflejos del espacio en pantalla.
La iluminación global de Lumen proporciona reflejos borrosos, incluso cuando la función Reflejos de Lumen está desactivada para favorecer la escalabilidad.
Al final, conseguimos encajar la iluminación global y los reflejos de Lumen en nuestra estimación de cuatro milisegundos de coste medio para 60 fps en las consolas de nueva generación. El capítulo 4 de Fortnite Battle Royale logra una resolución interna promedio de entre el 55 % y el 60 % de 4k en las consolas de nueva generación, además de conseguir 60 fps de forma fiable.

Reducción de escala

Fortnite está disponible para una amplia gama de plataformas, pero solo las plataformas más potentes son compatibles con Lumen. La experiencia de juego debe ser lo más homogénea posible entre plataformas, sin que los artistas tengan que adaptar la iluminación específicamente a cada una de ellas. Nosotros escalamos la luz ambiental en función de los ajustes de calidad de la iluminación global:

Épico y Alto
  • Lumen está activado y proporciona iluminación global total
  • Se emplea la filtración de luz cenital de Lumen para evitar que las áreas oscuras carezcan de luz totalmente
  • La exposición automática se activa para aplicar el grado exacto de exposición en zonas interiores
  • La exposición local está activada

Medio
  • En lugar de Lumen, se activa la oclusión ambiental de la distancia de campo para obtener una oclusión ambiental a gran escala
  • La oclusión ambiental del espacio en pantalla se activa para la oclusión ambiental a pequeña escala
  • La exposición automática está desactivada

Bajo
  • Luz cenital sin sombreado
  • La intensidad de la luz cenital se reduce usando r.SkylightIntensityMultiplier=0.7 para coincidir con el ajuste Medio, ya que no se dispone de ningún tipo de sombreado para la luz cenital

Esperamos que este resumen sobre las mejoras que aporta Lumen al capítulo 4 de Fortnite Battle Royale haya sido de utilidad y haya solventado cualquier duda sobre el lanzamiento de un juego multiplataforma con Lumen. Los desarrolladores de Unreal Engine ya tienen acceso a la gran mayoría de estas mejoras con Unreal Engine 5.1. Para obtener más información, consulta la documentación de Lumen .

    ¡Hazte ya con Unreal Engine!

    Consigue la herramienta de creación más abierta y avanzada del mundo.
    Unreal Engine incluye todas las funciones y acceso ilimitado al código fuente,
    ¡listo para usar!