fbpx

Virtual Shadow Maps en Unreal Engine 5

Virtual Shadow Maps (VSMs) es el nuevo método de mapeo de sombras en Unreal Engine 5 utilizado para distribuir un sombreado consistente y de alta calidad que funciona con assets de calidad de cine y mundos abiertos dinámicos y gigantes a través de las herramientas de UE5 Nanite, Lumen y World Partition.

Objetivos de Virtual Shadow Maps

Virtual Shadow Maps ha sido desarrollado para los siguientes objetivos:

  • Incrementar significativamente la resolución de las sombras para que cuadren con la geometría tan detallada de Nanite
  • Sombras suavizadas plausibles con costes de rendimiento razonables y controlables
  • Dar una solución sencilla que funciona por defecto con cantidades limitadas de ajustes que son necesarios
  • Reemplaza las técnicas de sombreado de luz estacionaria por un único path

Conceptualmente, virtual shadow maps son simplemente mapas de sombras en alta resolución. En su actual implementación, tienen una resolución virtual de 16k x 16k píxeles. Los clipmaps son utilizados para aumentar la resolución de forma más extensa de las luces direccionales. Para mantener el rendimiento alto y con un coste de memoria razonable, VSMs separa el shadow map en piezas (o páginas) de 128×128 píxeles cada una. Las páginas son distribuidas y renderizadas solo cuando se necesite para sombrear píxeles en pantalla basados en un análisis del buffer de profundidad. Las páginas son almacenadas entre frames salvo que sean invalidadas por objetos movibles o luz, entonces mejoran el rendimiento.

Activando Virtual Shadow Maps

En Project settings bajo Engine > Rendering en la sección de Shadows, puedes seleccionar qué Shadow Map Method trabaja tu proyecto, tanto Virtual Shadow Maps como el convencional Shadow Maps que es utilizado en versiones anteriores de Unreal Engine.

virtual shadow maps
Nota: Los proyectos ya existentes necesitarán optimizarse a través de los ajustes del proyecto o escribiendo r.Shadow.Virtual.Enable en la consola de Unreal. Los nuevos proyectos utilizan Virtual Shadow Maps por defecto.

¿Qué ocurre con los métodos de sombreado ya existentes cuando activas VSMs?

Cuando VSMs está activado, reemplaza una amplia variedad de sombras en Unreal Engine:

  • Sombras estacionarias precompuestas, incluyendo 2D Distance Field y shadow factor «shadow maps»
  • Pre-shadows
  • Per-object/inset shadows
  • Cascaded Shadow Maps (CSMs)
  • Distance Field Soft Shadows de Mesh Distance Fields
  • Sombras dinámicas movibles para luces locales

Las sombras bakeadas procedentes de las luces estáticas funcionarán igual que antes (mientras no estés utilizando Lumen). Las luces estacionarias utilizarán la contribución de cualquier baked lightmap, pero su luz directa y sus sombras son evaluadas dinámicamente (al igual que las luces movibles) cuando VSMs está activado.

Debido a la alta resolución y precisión de VSMs, el Contact Shadow controlado con la Contact Shadow Length ya no es necesario para conseguir sombras de contacto nítidas. Todavía pueden utilizarse para crear sombras «baratas» de objetos sin tener que renderizar pero no es muy recomendable, ya que será menos preciso que las sombras que el VSMs creará.

Las sombras ray-traced tendrán preferencia sobre las de VSMs, ya que generalmente son las que dan la calidad más alta posible.

shadow map ray tracing
Ejemplo de una luz puntual casteando sombras suaves con contact más nítido utilizando Shadow Map Ray Tracing

Calidad del Virtual Shadow Map

La calidad de los VSMs es buena en la mayoría de situaciones, pero todavía surgen unas cuantas limitaciones.

Materiales

Para los materiales, subsurface y transmissions no están implementadas todavía. Si un material las está utilizando, ese material será sombreado como si fuera opaco.

Resolución de la sombra

VSMs nos da una resolución significantemente mayor comparada con la de los shadow maps convencionales, pero los shallow light angles (o el aliasing proyectado) y luces locales gigantes pueden agotar la resolución virtual disponible. Esto puede presentarse como sombras en forma de cajas y problemas de bias dependiendo de la superficie de la geometría. Los clipmaps de luz direccional son mucho menos susceptibles a quedarse sin resolución, pero campos de visión muy estrechos de cámara pueden llegar a agotarlos también.

No hay una solución sencilla para resolver el projective aliasing con shadow maps. Incluso con VSMs, se necesita tener cuidado para evitar los peores casos.

Luces direccionales con low light angles

Hay un pequeño incidente que puede ocurrir con las luces direccionales en ángulos de poca luz, como por ejemplo, estar justo encima del horizonte. Debido a que los depths en páginas almacenadas están reescalados en cada frame, es posible que se pierda resolución cuando te muevas rápidamente cerca de una superficie que está casi paralela a la dirección de la luz.

Si te ocurre esto, prueba a desactivar el almacenamiento VSM (caching) escribiendo en la consola «r.Shadow.Virtual.Cache 0 » y ver si desaparece el problema. Pero tranquilo, este problema de Virtual Shadow Maps será resuelto en un próximo parche de Unreal Engine 5.

unreal engine 5