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.
Virtual Shadow Maps ha sido desarrollado para los siguientes objetivos:
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.
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.
Cuando VSMs está activado, reemplaza una amplia variedad de sombras en Unreal Engine:
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.
La calidad de los VSMs es buena en la mayoría de situaciones, pero todavía surgen unas cuantas limitaciones.
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.
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.
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.