Los Mapas de sombras virtuales (Virtual Shadow Maps, VSM) son el nuevo método de mapeo de sombras utilizado para ofrecer sombras consistentes y de alta resolución que funcionan con recursos de calidad cinematográfica y entornos abiertos de gran tamaño e iluminados dinámicamente mediante las funciones de Geometría virtualizada de Nanite, Reflejos e iluminación global de Lumen y Partición del entorno de Unreal Engine 5.
Objetivos de los Mapas de sombras virtuales
Los Mapas de sombras virtuales se desarrollaron con los siguientes objetivos:
- Aumentar significativamente la resolución de las sombras para ajustarse a la geometría altamente detallada de Nanite.
- Sombras suaves plausibles con costos de rendimiento razonables y controlables.
- Ofrecer una solución sencilla que funcione de forma predeterminada con una cantidad limitada de ajustes necesarios.
- Sustituir las numerosas técnicas de sombreado con Luz estacionaria por una única ruta unificada.
Conceptualmente, los mapas de sombras virtuales no son más que mapas de sombras de muy alta resolución. En su implementación actual, tienen una resolución virtual de 16k x 16k píxeles. Los clipmaps se utilizan para aumentar aún más la resolución de las Luces direccionales. Para mantener un alto rendimiento con un costo de memoria razonable, los VSM dividen el mapa de sombras en mosaicos (o páginas) de 128 x 128 cada uno. Las páginas se asignan y renderizan solo cuando es necesario para sombrear los píxeles en pantalla basándose en un análisis de la memoria intermedia de profundidad. Las páginas se almacenan en caché entre fotogramas a menos que se invaliden por objetos en movimiento o por la luz, lo que mejora aún más el rendimiento.
Nanite no admite muchas de las técnicas de sombreado de la Luz estacionaria, como las presombras y las sombras por objeto (o añadida). Aunque algunas de las partes más dinámicas del sombreado de Luz estacionaria pueden funcionar (como los Mapas de sombras en cascada cerca del visor de la cámara), Nanite y las Luces estacionarias con mapas de sombras convencionales no son compatibles. Si usas Nanite en tu proyecto, debes usar Luces movibles o Mapas de sombras virtuales.
Cómo activar Mapas de sombras virtuales
En la Configuración del proyecto, en Motor > Renderización, en la sección Sombras, puedes establecer qué Método de mapa de sombras admite tu proyecto, si Mapas de sombras virtuales o los Mapas de sombras convencionales que se utilizaron en versiones anteriores de Unreal Engine.
Los proyectos existentes tendrán que optar por utilizar la configuración del proyecto, o la variable de consola r.Shadow.Virtual.Enable. Los nuevos proyectos utilizan Mapas de sombras virtuales de forma predeterminada.
¿Qué ocurre con los métodos de sombra existentes cuando se activan los VSM?
Cuando se activan los VSM, sustituyen a diversos métodos de sombras existentes en Unreal Engine:
- Sombras estacionarias precalculadas, incluido el campo de distancia 2D y los "mapas de sombra" de factor de sombra
- Presombras
- Sombras por objeto/añadidas
- Mapas de sombras en cascada (CSM)
- Sombras dinámicas movibles para luces locales
Las sombras totalmente integradas de las Luces estáticas seguirán funcionando como antes (cuando no se utilice Lumen). Sus contribuciones están completamente representadas en los mapas de luz integrados y no se evalúa la iluminación en tiempo de ejecución. Las luces estacionarias usarán la contribución difusa indirecta de cualquier mapa de luz integrado, pero su iluminación directa y sombras se evalúan dinámicamente (igual que las Luces movibles) cuando los VSM están activados.
Las Sombras de campo de distancia no se sustituyen y pueden utilizarse junto con Mapas de sombras virtuales para Luces direccionales. Las Sombras de campo de distancia toman el control de la geometría que no es de Nanite más allá de la distancia de sombreado dinámico de las Luces movibles, que se establecen en una Luz direccional mediante la propiedad Luz movible de distancia de sombreado dinámico de Mapas de sombra en cascada. El uso de Sombras de campo de distancia ofrece una herramienta útil para reducir los costos de tiempo de ejecución en escenas complejas, como las que tienen mucho follaje que no es de Nanite.
La geometría de Nanite siempre se renderiza en el Mapa de sombras virtual, independientemente de la distancia, ya que es la opción más eficaz y la que ofrece mayor calidad. Es posible hacer que la geometría que no es de Nanite se comporte igual que la de Nanite mediante la variable de consola r.Shadow.Virtual.UseFarShadowCulling 0.
Las luces locales (Puntos de luz y Focos de luz) no se ven afectadas, y la selección de sombras de Campo de distancia para estas sigue anulando el método de mapa de sombras activo.
Debido a la alta resolución y precisión de los VSM, la función Sombra de contacto en el espacio de pantalla controlada con la propiedad Longitud de la sombra de contacto ya no es necesaria para conseguir sombras de contacto nítidas. Todavía puede tener valor cuando se utiliza para recoger sombras más baratas de objetos configurados con el fin de no renderizar en mapas de sombras, pero no se recomienda de otra manera, ya que será menos preciso que las sombras que crearán los VSM.
Las sombras con trazado de rayos siguen teniendo prioridad sobre los VSM, ya que suelen ofrecer la solución de mayor calidad.
Sombras suaves con Trazado de rayos del mapa de sombras
El Trazado de rayos del mapa de sombras (SMRT) es un algoritmo de muestreo que se utiliza con mapas de sombras virtuales para producir sombras suaves y endurecimiento de contactos más verosímiles. Los objetos que proyectan sombras más lejanas tendrán sombras más suaves que los objetos que proyectan sombras más cercanas a una superficie receptora de sombras. Por ejemplo, la malla que se muestra a continuación es alta y proyecta su sombra a gran distancia. Las sombras cercanas a la base son más nítidas que las alejadas.
Ejemplo con un Punto de luz que proyecta sombras suaves y sombras de contacto endurecidas mediante Trazado de rayos del mapa de sombras.
Los métodos anteriores basados en el Filtrado por porcentaje de cierre (Percentage-Closer Filtering, PCF) difuminaban en exceso y reducían el impacto visual de la geometría de alta resolución y las sombras.


El algoritmo de SMRT funciona al proyectar una cantidad de rayos hacia la fuente de luz, pero en lugar de evaluar las intersecciones con la geometría (como lo hace el trazado de rayos convencional) se proyectan una cantidad de muestras a lo largo del rayo y se prueban contra el mapa de sombras virtual para lograr sombras suaves y endurecimiento por contacto. Los rayos de sombra se distribuyen según la luz mediante el Radio de la fuente en luces locales o Ángulo de la fuente en Luces direccionales.
![]() |
![]() |
|---|---|
| Radio de la fuente de luz local | Ángulo de la fuente de luz direccional |
Las luces locales no tienen Radio de la fuente de forma predeterminada, en comparación con las Luces direccionales que comienzan con un Ángulo bajo de la fuente. Cuando cualquiera de los dos se establece con un valor apropiado, el SMRT produce sombras suaves en tiempo real con endurecimiento por contacto, como el ejemplo de abajo que utiliza un Punto de luz con un Radio de la fuente de 10.


Control de la calidad de las sombras de penumbra
La suavidad y calidad de la sombra de penumbra se ajusta mediante variables de consola tanto para las luces locales como para las direccionales. Incluyen su propia configuración de escalabilidad que suele ser buena para la mayoría de las escenas.
El ruido en la penumbra está influenciado por la cantidad de rayos que se utilizan, y tanto las Luces locales como las direccionales utilizan ocho rayos de forma predeterminada cuando la escalabilidad de Sombras se establece en Épica.
Utiliza las variables de consola r.Shadow.Virtual.SMRT.RayCountLocal y r.Shadow.Virtual.SMRT.RayCountDirectional para ajustar la cantidad de rayos. Con menos rayos se aprecia ruido en la penumbra. Si se establece la variable de consola asociada en 0, se desactiva el SMRT y se vuelve a las sombras duras de una sola muestra.


Además, la cantidad de muestras de sombra tomadas a lo largo de la trayectoria de cada rayo puede ajustarse tanto para Luces locales como direccionales para controlar la suavidad máxima. Una menor cantidad de muestras del mapa de sombras es más barata de renderizar, pero limita la cantidad de suavidad de penumbra que se puede conseguir con las sombras de la luz.
Para un control más fino que los ajustes de escalabilidad de Sombra, y las variables de consola r.Shadow.Virtual.SMRT.SamplesPerRayLocal y r.Shadow.Virtual.SMRT.SamplesPerRayDirectional para ajustar la cantidad de muestras utilizadas. Utilizar valores entre 4 y 8 muestras funciona bien.

Al arrastrar el control deslizante se mostrará lo que ocurre cuando una Luz direccional con un Ángulo de la fuente de 5,0 utiliza Muestras de mapa de sombras con los números 0, 2 y 8 (de forma predeterminada).
Limitaciones del Trazado de rayos del mapa de sombras
La calidad del SMRT suele ser buena con la configuración predeterminada, pero existen limitaciones inherentes al uso de los datos de una única proyección de mapa de sombras en lugar de realizar pruebas con una geometría real.
Límites de tamaño de penumbra
La penumbra de la sombra se sujeta para las Luces locales y direccionales con el fin de evitar la divergencia de la muestra desde el origen del rayo que puede llegar a ser cada vez más "doblada" en comparación con la prueba ideal a lo largo del propio rayo. El uso de valores razonables para el Radio de la fuente en las luces locales y el Ángulo de la fuente en las Luces direccionales evitará resultados demasiado extremos, lo que limitará el grado en que el rayo puede divergir de varias maneras. Los valores demasiado grandes pueden afectar al rendimiento y provocar que las penumbras de sombras se deformen visualmente cuando la cámara se acerca a ellas.

Las Luces locales y direccionales pueden utilizar las variables de consola r.Shadow.Virtual.SMRT.MaxRayAngleFromLight y r.Shadow.Virtual.SMRT.RayLengthScaleDirectional para aflojar o apretar las extensiones sujetas.
Penumbra inconsistente
Dado que el Mapa de sombras virtual solo almacena la primera capa de profundidad en la que la iteración ingenua omite las intersecciones con cualquier oclusor situado detrás del primero, pueden producirse diversos artefactos de fuga de luz en los puntos en los que los oclusores se solapan. Estos tipos de fugas de luz se resuelven mediante una heurística de relleno de huecos que extrapola las profundidades detrás del primer oclusor según las profundidades observadas antes del punto de oclusión.
Esto funciona bien para resolver las fugas de luz, pero hace que las penumbras de las superficies paralelas a la luz disminuyan de tamaño. Actualmente no hay ninguna forma directa de contrarrestar este efecto, aparte de mantener unos tamaños de penumbra razonables.
Ejemplos de sombras de penumbra inconsistentes.
Artefactos de penumbra
De forma predeterminada, los Mapas de sombras virtuales solo garantizan la presencia de las muestras alrededor del origen del rayo (el píxel receptor). A medida que el algoritmo atraviesa el rayo, puede encontrarse con páginas no asignadas en las que no existan datos de sombra. Para reducir el impacto de esta situación, se utilizan diversas técnicas, como dilatar ligeramente las asignaciones de páginas y disponer de varias alternativas durante la iteración. Aun así, pueden producirse artefactos ocasionales derivados de la falta de páginas, sobre todo en los bordes de la pantalla cuando se amplía en penumbras suaves. Estos artefactos se manifestarán como fugas de luz ruidosas en las zonas de sombra. Al igual que otras limitaciones de los VSM, los problemas pueden evitarse, sobre todo si se mantiene un tamaño razonable de las penumbras de las sombras y se evita acercar el zoom hasta el punto de que cubran grandes porciones de la pantalla.
Clipmaps de Luz direccional
Un único mapa de sombras virtual no aporta suficiente resolución para cubrir grandes áreas. Las Luces direccionales utilizan una estructura de clipmap de rangos en expansión alrededor de la cámara, en la que cada nivel de clipmap tiene su propio VSM de 16K. Cada nivel de clipmap tiene la misma resolución, pero cubre el doble del radio del anterior.
![]() |
![]() |
|---|---|
| Visualización de clipmap de Luz direccional | Visualización de páginas de Mapas de sombras virtuales |
De forma predeterminada, los niveles 6 a 22 de clipmap tienen asignadas tablas de páginas de mapas de sombra virtuales. Esto significa que la configuración predeterminada tiene el clipmap más detallado que cubre 64 cm (2^6 cm) desde la posición de la cámara, y el clipmap más amplio que cubre unos 40 kilómetros (2^22 cm). El costo de los niveles de clipmap virtual es insignificante si no hay nada en ellos, por lo que estos valores predeterminados funcionan bien para cubrir escenas muy grandes con una resolución bastante alta cerca de la cámara.
El primer y último nivel se pueden ajustar mediante las variables de consola r.Shadow.Virtual.Clipmap.FirstLevel y r.Shadow.Virtual.Clipmap.LastLevel.
La resolución asignada a un píxel dado es una función de la distancia desde el origen del clipmap, la cámara. Esto lo establece la escalabilidad de Sombra con la variable de consola r.Shadow.Virtual.ResolutionLodBiasDirectional. Un valor de 0 recoge la resolución requerida basada en la proyección en perspectiva de la cámara.
El aliasing proyectivo (cuando una sombra se proyecta sobre una superficie casi paralela a la dirección de la luz) sigue siendo posible, incluso a altas resoluciones, pero puede reducirse en parte sesgando la resolución. Al igual que ocurre con el sesgo de MIP en las texturas, al reducir el valor en -1 se duplica la resolución de las sombras con las compensaciones de rendimiento asociadas. El valor predeterminado de -1,5 en la escalabilidad de Sombra épica aporta un equilibrio razonable para muchas escenas.
Luces locales
Los Focos de luz utilizan un único VSM de 16k con una cadena de MIP en lugar de clipmaps para manejar el nivel de detalle de las sombras. Del mismo modo, los Puntos de luz utilizan un Cube Map de 16k VSM, uno por cada cara.
Las luces locales suponen un aumento significativo de la resolución en comparación con los mapas de sombras tradicionales. Es posible que se agote la resolución virtual con luces locales muy grandes, y se debe tener cuidado de utilizar Luces direccionales siempre que sea posible en estos casos.


Los niveles de MIP adecuados se eligen al proyectar el tamaño de los píxeles de la pantalla en el espacio del mapa de sombras. Al igual que las Luces direccionales, es posible sesgar la resolución con los ajustes de escalabilidad de Sombra, o utilizando la variable de consola r.Sombra.Virtual.ResoluciónLodBiasLocal.
Los controles de resolución por luz no están disponibles, pero es posible que se añadan en una versión futura.
Páginas gruesas
El análisis del búfer de profundidad se utiliza como método principal para marcar las páginas que es necesario renderizar. Sin embargo, hay algunos sistemas que necesitan muestrear las sombras en ubicaciones más arbitrarias, como la Niebla volumétrica y la translucidez renderizada hacia delante. La mayoría de los sistemas solo necesitan datos de sombras de baja resolución que se filtran y difuminan a través de otras estructuras de datos.
Para tener en cuenta las sombras en estas situaciones, se marcan Páginas gruesas con el fin de garantizar que al menos se disponga de datos de sombras de baja resolución en todo el dominio del muestreo. Las luces locales simplemente marcan la página MIP raíz, mientras que las Luces direccionales pueden marcar una serie de páginas a varios niveles de detalle bajos para formar algunos clipmaps gruesos. Según la escena, las páginas gruesas pueden crear problemas de rendimiento. Esto es especialmente cierto en el caso de la geometría dinámica que no es de Nanite, ya que lo que se hace es renderizar sombras de baja resolución en grandes regiones del espacio, lo que puede provocar atascos en las llamadas de dibujo.
Se recomienda experimentar con la desactivación de la renderización de objetos no Nanite en las páginas gruesas con la variable de consola r.Shadow.Virtual.NonNanite.IncludeInCoarsePages 0.
Muchas escenas (especialmente las que consisten principalmente en geometría de Nanite) no necesitan objetos que no sean de Nanite proyectando sombras sobre la Niebla volumétrica y cosas similares. Deshabilitar esto puede suponer una mejora significativa del rendimiento.
Las páginas gruesas de luz local se pueden desactivar con r.Shadow.Virtual.MarkCoarsePagesLocal, si no se necesitan.
Las páginas gruesas de Luz direccional se pueden desactivar con r.Shadow.Virtual.MarkCoarsePagesDirectional, o se puede modificar el rango de niveles del clipmap en el que se marcan las páginas gruesas con r.Shadow.Virtual.FirstCoarseLevel y r.Shadow.Virtual.LastCoarseLevel.
En una futura versión, una solución más elegante sería poder marcar algunos de estos efectos para las páginas localizadas directamente por adelantado, en lugar de utilizar las páginas gruesas actuales, demasiado conservadoras.
Visualización
Se puede acceder a las opciones de visualización de los Mapas de sombras virtuales desde el Viewport del Nivel mediante el menú desplegable Modos de visualización y seleccionando Mapa de sombras virtual.
Las opciones de visualización incluyen las siguientes:
| Nombre de la visualización | Descripción |
|---|---|
| Máscara de sombra | La máscara de sombra final que usa el sombreado. |
| Nivel de clipmap/MIP | El nivel de clipmap (para Luces direccionales) o de MIP (para Luces locales) elegido. |
| Página virtual | Visualización de la dirección de la página virtual. |
| Página en caché | Las páginas en caché se tiñen de verde, las páginas sin caché se tiñen de rojo. Las páginas en las que solo se almacena en caché la página estática (no se almacena en caché la dinámica) son azules. |
De forma predeterminada, las visualizaciones del Mapa de sombras virtual muestran los resultados de la Luz direccional. Al seleccionar una luz en el Esquematizador del entorno, puedes ver visualizaciones para esa luz.
También puedes activar la visualización mediante la consola (excepto en las versiones de envío), lo que resulta útil para perfilar y depurar un juego en vivo. Si cualquiera de estos se establece en el editor, anulan cualquier selección de modo realizada a través de la interfaz de usuario del editor.
| Nombre de la visualización | Descripción |
|---|---|
r.Shadow.Virtual.Visualize [mode] |
Cuando la visualización del modo de vista se establece en Mapa de sombras virtual a través del Viewport del Nivel o del comando de consola, este comando especifica cuál de los canales mostrar. Usa los nombres de abajo en lugar de "[mode]" para habilitar esa visualización. Cache y vpage son dos nombres comunes utilizados para la visualización y none desactiva la visualización vsm.
|
ShowFlag.VisualizeVirtualShadowMap |
Activa la visualización del Mapa de sombras virtual cuando se especifica un modo de visualización. |
r.Shadow.Virtual.Visualize.Layout |
Elige un diseño para la visualización del Mapa virtual de sombras.
|
r.Shadow.Virtual.Visualize.DumpLightNames |
Muestra una lista de las luces actuales con Mapas de sombras virtuales en la consola. |
r.Shadow.Virtual.Visualize.LightName [light name] |
Especifica una luz por su nombre, se aceptan coincidencias parciales o totales. |
La activación de los modos de visualización tiene un efecto pequeño pero medible en el rendimiento de los Mapas de sombras virtuales. Asegúrate de desactivar la visualización antes de generar perfiles de rendimiento.
Almacenamiento en caché
La reutilización de páginas de mapas de sombras de fotogramas anteriores es clave para mantener un alto rendimiento con los Mapas de sombras virtuales, especialmente en escenas complejas. El almacenamiento en caché está activado de forma predeterminada, pero puede desactivarse con fines de depuración mediante la variable de consola r.Shadow.Virtual.Cache 0.
Dado que las páginas solo se renderizan para los píxeles en pantalla, el cambio de visibilidad de la cámara debido al movimiento de la desoclusión puede revelar nuevas páginas que necesiten ser renderizadas. En general, mientras el movimiento de la cámara sea relativamente suave, no es una fuente importante de páginas nuevas. En cambio, hay que tener cuidado con los movimientos muy rápidos cerca de los objetos, las grandes desoclusiones y los cortes de cámara.
En la mayoría de las escenas, la mayor fuente de trabajo proviene de las páginas del mapa de sombras que necesitan redibujarse debido a cambios en la geometría de la escena. Las fuentes comunes de invalidaciones de páginas de caché incluyen lo siguiente:
- Cualquier movimiento o rotación de la luz invalidará todas las páginas almacenadas para esa luz.
- La geometría que proyecta sombras al moverse, o al añadirse o eliminarse de la escena, invalidará cualquier página que se superponga a su cuadro delimitador desde la perspectiva de la luz.
- Esto puede incluir objetos como Blueprints que establecen propiedades en componentes primitivos que activan la invalidación del estado de renderizado, aunque en realidad no se mueva.
- Geometría que utiliza materiales que pueden modificar las posiciones de la malla, como el Desplazamiento de la posición del entorno (World Position Offset, WPO) o el Desplazamiento de la profundidad de píxeles (Pixel Depth Offset, PDO).
En los casos en los que la luz se mueva lentamente, o la Luz direccional cambie según la hora del día, las páginas de VSM no se almacenarán en caché. En situaciones como los cambios de hora del día, se recomienda cuantificar los cambios en una pequeña cantidad para permitir que las páginas almacenadas en caché vivan durante una cierta cantidad de fotogramas, ya que las pequeñas diferencias en la dirección no serán perceptibles.
En una futura versión, se mejorará el almacenamiento en caché al añadir un sistema de prioridades y presupuestos de actualización por fotograma para permitir un control más preciso del costo de renderización de las sombras. Por ejemplo, permitir que la resolución de las sombras se reduzca temporalmente en los casos en que demasiadas páginas necesiten actualizaciones.
Cómo administrar invalidaciones de caché
La mejor forma de reducir las invalidaciones de la caché es, en primer lugar, visualizar las invalidaciones y, luego, encontrar y reducir las causas que las provocan. La Visualización de páginas en caché es un buen punto de partida.
Visualización de páginas en caché
En esta visualización, las páginas totalmente almacenadas en caché aparecen sombreadas en verde. Las páginas nuevas o invalidadas aparecen en rojo. A medida que mueves la cámara, verás pequeños anillos rojos cerca de los bordes de la pantalla, los límites del clipmap y la geometría desocluida. Con una cámara estática, la mayoría de las páginas nuevas provendrán de invalidaciones de caché.
Si el almacenamiento en caché estático está activado (consulta más abajo), las páginas que están parcialmente almacenadas en caché (donde solo la parte estática es válida) se mostrarán en azul.
Una vez que se hayan encontrado las áreas problemáticas, a menudo es útil además activar una visualización de los límites de los objetos que provocan las invalidaciones con la variable de consola r.Shadow.Virtual.Cache.DrawInvalidatingBounds 1. Inspecciona estos objetos y sus límites para garantizar que se trata efectivamente de objetos que se espera que invaliden las sombras, y que sus límites son lo más ajustados posible. Dado que todas las páginas que un objeto invalidante podría solapar potencialmente dentro de sus límites deben validarse, incluso unos límites moderadamente inflados combinados con ángulos de luz bajos pueden provocar muchas invalidaciones innecesarias.
Páginas en caché y visualización de límites no válidos
Las invalidaciones que están totalmente a la sombra de objetos de Nanite pueden omitirse, pero esto no ocurre con los objetos que no son de Nanite. Por este motivo, es especialmente importante garantizar que los objetos que proyectan sombras grandes, como los edificios, utilicen Nanite.
En escenas complejas, a veces puede ser difícil determinar con precisión qué es lo que provoca las invalidaciones, incluso con estas visualizaciones. Otra herramienta que puede ayudar es el modo de visualización Dibujar solo la geometría que provoca la invalidación del VSM que se encuentra en el viewport del Nivel en Mostrar > Visualizar.
Cuando está activada, se oculta cualquier geometría que no provoque invalidaciones de caché.
Debido a detalles de implementación, el modo Dibujar solo la geometría que provoca la invalidación del VSM ocasionalmente muestra objetos que no están relacionados con el sombreado (como partículas y efectos visuales) que experimentan una pasada de renderización distinta y se dibujarán encima.
Las estadísticas no son fiables cuando se utiliza esta visualización porque la renderización de la escena principal afecta de forma diferente a las páginas que se asignan e invalidan. Es mejor empezar con otros modos de visualización y utilizar este para realizar una doble comprobación.
Existe un problema conocido con los Componentes de captura de escenas que puede provocar la invalidación de toda la caché.
Follaje y deformación no Nanite
La geometría que puede deformarse mediante animación esquelética, o materiales mediante el Desplazamiento de posición del entorno o Desplazamiento de profundidad de píxeles siempre invalida las páginas almacenadas en caché cada fotograma. Por definición, estos casos también deben ser no Nanite (que es más caro) y por lo tanto es extremadamente importante garantizar que estas características se utilizan con cuidado y los límites se mantienen bajo control.
En algunos casos, como el césped y a veces el follaje, utilizar solo Sombras de contacto es un sustituto suficiente para los mapas de sombras de alta resolución. En los casos en los que se necesiten sombras muy detalladas en primer plano, considera lo siguiente para ayudar a mitigar el costo de rendimiento:
- Los objetos que no son de Nanite siguen respetando la configuración habitual de eliminación de la CPU de sombras, como
r.Shadow.RadiusThreshold. Utilízalos para ayudar a controlar el costo de renderización de estos objetos en Mapas de sombras virtuales. - En escenas con mucho follaje, es muy recomendable desactivar los objetos que no sean Nanite en las páginas gruesas con
r.Shadow.Virtual.NonNanite.IncludeInCoarsePages 0. O considera desactivar completamente las páginas gruesas si no son necesarias. - Usa LOD de malla para cambiar a materiales que no usan WPO/PDO a distancias en las que el efecto ya no es obvio. En algunos casos, puede ser posible desactivar la proyección de sombras dinámicas para estos objetos en la distancia y confiar totalmente en el espacio de pantalla Sombras de contacto.
Para las Luces direccionales, hay opciones adicionales disponibles:
- Las Sombras de campo de distancia toman el control de la geometría no Nanite más allá de la distancia de la Luz movible de distancia de sombra dinámica establecida por la sección de Mapas de sombra en cascada de la Luz. Cambiar a Sombras de campo de distancia para no Nanite en la distancia puede ser una gran mejora de rendimiento ya que esta geometría no tiene el escalado de LOD de grano fino que ofrece Nanite.
-
En algunos casos, crear LOD de material que eliminen WPO/PDO puede ser poco práctico, pero el efecto final de estas transformaciones es pequeño en la distancia. Utiliza
r.Shadow.Virtual.Cache.MaxMaterialPositionInvalidationRangepara establecer una distancia (en centímetros) más allá de la cual se ignoran las invalidaciones de caché de estos materiales.Esto puede hacer que las sombras se "emborronen" y que los objetos se autosombreen incorrectamente si el movimiento es significativo, pero a menudo los artefactos son una compensación razonable por el rendimiento y la comodidad.
Almacenamiento en caché estático independiente
Esta función se considera experimental.
Muchas escenas constan de una gran cantidad de geometría estática que nunca se mueve, junto con cantidades significativamente menores de geometría dinámica (o movible). De forma predeterminada, esto significa que la geometría dinámica relativamente barata invalida páginas que luego hacen que la costosa geometría estática se vuelva a renderizar, solo para actualizar la parte dinámica.
Para optimizar mejor en estos casos, se puede activar un modo opcional de Almacenamiento en caché estático independiente mediante r.Shadow.Virtual.Cache.StaticSeparate 1. Este modo duplica el tamaño del conjunto de páginas físicas para que la geometría estática de una página determinada pueda almacenarse en caché por separado de la geometría dinámica. Incluso cuando la geometría dinámica se mueve, no es necesario volver a dibujar la geometría estática. En su lugar, la página estática almacenada en caché puede componerse encima a bajo costo. En casos como el del proyecto de muestra Valley of the Ancients, puede suponer una importante optimización del rendimiento, ya que el terreno estático es muy caro, mientras que los elementos dinámicos son relativamente baratos.
Al utilizar este modo, es importante establecer con precisión la Movilidad de los Actores en la escena. En particular, si un Actor que está configurado en Movilidad estática se mueve (o incluso utiliza un material con Desplazamiento de posición del entorno o materiales similares no soportados), invalida tanto las páginas dinámicas como las estáticas almacenadas en caché, lo que resulta en pura sobrecarga para ninguna ganancia. Por el contrario, si gran parte de la geometría costosa se establece en Movilidad móvil, puede resultar poco beneficioso almacenarla en caché por separado.
Las estadísticas del Mapa de sombras virtual son una buena manera de obtener una visión general de alto nivel de lo bien que está funcionando el almacenamiento en caché estático. En particular, la cantidad de páginas estáticas "invalidadas" debería ser cercana a 0. Encontrar instancias que estén invalidando la caché estática con frecuencia y cambiarlas a Movible es una forma importante de garantizar que la caché estática permanece válida.
Nanite incluye un modo de visualización avanzado para ayudar a determinar la movilidad de los objetos en el entorno, que también es útil para los Mapas de sombras virtuales.
Modo de visualización estática avanzada del Mapa de sombras virtual de Nanite
Este modo de visualización puede activarse de dos maneras:
-
Activa las opciones avanzadas de visualización de Nanite con
r.Nanite.Visualize.Advanced 1y, luego, usa el Viewport del Nivel para seleccionar el Modo de visualización > Visualización de Nanite y elige Mapa de sombras virtual estático de la lista de opciones de visualización.Haz clic en la imagen para ampliarla.
-
Alternativamente, puede activar la visualización del Mapa de sombras virtual estático con el comando
r.Nanite.Visualize vsmstatic.
Generación de perfiles y optimización de la GPU
Unreal Engine ofrece herramientas que te ayudan a comprobar el rendimiento de tus proyectos, y el Perfilador de GPU (o la herramienta específica de la plataforma) es un buen punto de partida para solucionar y depurar problemas de rendimiento.
Hay dos categorías principales de rendimiento en las que aparecerán los costos de VSM: Profundidades y proyección de sombras (en Luces). Las compensaciones en cada una de sus categorías son relativamente independientes entre sí.
Ten en cuenta que los comandos utilizados para listar estadísticas, como la gpu de estadísticas y los contadores asociados, pueden ofrecer tiempos poco fiables, especialmente si el rendimiento de tu proyecto está ligado a la CPU.
Profundidades de las sombras
La categoría Profundidad de las sombras se refiere al costo de renderizar la geometría en mapas de sombras.
- RenderVirtualShadowMaps(Nanite) contiene toda la renderización de la geometría Nanite en los VSM. Todas las Luces direccionales se renderizan en una sola pasada de Nanite, y todas las luces locales se hacen en una segunda pasada.
- RenderVirtualShadowMaps(Non-Nanite) maneja la renderización de geometría no Nanite. Cada luz visible tiene una pasada independiente con llamadas de dibujo individuales para varios objetos e instancias, igual que la renderización convencional de mapas de sombras.
- Atlas y Cube Map, junto con otras pasadas similares, después de las pasadas de VSM están renderizando mapas de sombras convencionales. Todavía hay una pequeña cantidad de tipos de geometría que aún no se admiten en la ruta de Mapas de sombras virtuales, y esos siguen la ruta antigua. Si no hay geometría no admitida proyectando sombras, estas pasadas no se ejecutarán ni asignarán almacenamiento de mapas de sombras. Estas pasadas y la sobrecarga asociada pueden deshabilitarse completamente con el cvar
r.Shadow.Virtual.ForceOnlyVirtualShadowMaps 1, en cuyo caso cualquier tipo de geometría no soportada simplemente no proyectará sombras.
El costo de la pasada de Profundidades de sombra con los VSM está directamente relacionado con la cantidad de páginas de sombra que deben renderizarse y la cantidad de geometría que debe renderizarse en ellas. La geometría no Nanite es mucho más cara de renderizar en los VSM que la geometría Nanite. Por esta razón, se recomienda activar Nanite en toda la geometría soportada, lo que incluye mallas de baja poligonización. La única excepción es para las características que aún no son compatibles con la Geometría virtualizada de Nanite.
Comprensión de la cantidad de páginas que se dibujan
Las estadísticas en pantalla de las páginas de VSM utilizadas pueden dar una idea de cuántas páginas se están utilizando y dónde buscar para resolver posibles problemas.
Usa las siguientes variables de consola sucesivamente para activar las estadísticas:
r.ShaderPrintEnable 1r.Shadow.Virtual.ShowStats 1(o 2 para mostrar solo las estadísticas de la página)
| Nombre de la estadística | Descripción |
|---|---|
| Páginas físicas | La cantidad máxima de páginas físicas que pueden utilizar los mapas de sombras virtuales. |
| Asignadas | La cantidad total de páginas de mapas de sombras solicitadas por la vista actual. Siempre debe ser menor que el Máximo de páginas, de lo contrario pueden producirse daños. (Consulta la sección Problemas y limitaciones que aparece a continuación). |
| Borradas | La cantidad de páginas nuevas que se borraron en el marco actual. |
| Almacenadas en caché | La cantidad de páginas que ya están en la caché de páginas del mapa de sombras virtual, y que no necesitan renderizarse en el fotograma actual. Las páginas almacenadas en caché tienen un costo muy bajo y casi ningún impacto en el rendimiento. Cuando se activa el almacenamiento en caché estático por separado, este se divide a su vez en Páginas estáticas en caché y Páginas dinámicas en caché. |
| Invalidadas | La cantidad de páginas almacenadas en caché que se invalidaron por geometría dinámica en el fotograma anterior. Estas páginas necesitan renderizarse de nuevo porque algo que las cubría se movió. Cuando se utiliza almacenamiento en caché estático separado, la cantidad de invalidaciones de páginas estáticas debería ser idealmente cero o muy cercano a cero. Si se invalidan una gran cantidad de páginas estáticas, el actor o actores que provocan las invalidaciones deberían cambiarse a Movible. |
| Fusionadas | Cuando está activado el almacenamiento en caché estático independiente, este es la cantidad de páginas en las que las páginas dinámicas y estáticas se fusionaron (debido a que una u otra no se almacenaron en caché). |
Los recuentos totales de páginas son una función de la cantidad promedio de luces que afectan a cada píxel de la pantalla. Pueden disminuirse al reducir la resolución de la pantalla, la resolución de las sombras (mediante el uso de las variables de la consola para el sesgo de LOD de la resolución), la extensión de las luces o la cantidad de luces que proyectan sombras.
Un rendimiento deficiente en las profundidades de sombra suele estar asociado a una cantidad elevada de páginas en uso y a que se produzcan muchas invalidaciones dinámicas, lo que provoca un almacenamiento en caché deficiente de los VSM. Consulta la sección Almacenamiento en caché para obtener más información sobre cómo diagnosticar y reducir las invalidaciones de la caché.
Mejora del rendimiento no Nanite
Además de mejorar el almacenamiento en caché, hay varias formas de mejorar el rendimiento de la renderización de sombras que no son de Nanite.
Considera lo siguiente para mejorar el rendimiento de los objetos no Nanite:
- Activa Nanite en tanta geometría como sea posible para tu proyecto.
- La geometría Nanite se renderiza de forma mucho más eficiente en Mapas de sombras virtuales y debería preferirse en todos los casos aplicables, independientemente del recuento de polígonos.
- La geometría Nanite puede ocultar la geometría no Nanite y evitar invalidaciones espurias de la caché. Así, los únicos objetos que no son de Nanite deberían ser aquellos que no admite el propio Nanite, como objetos deformables (mallas con piel) o materiales que utilizan Desplazamiento de posición del entorno (WPO) y Desplazamiento de profundidad de píxeles (PDO).
- Los objetos que no son Nanite deben tener configuradas todas las jerarquías de LOD de malla.
- Es importante que las mallas que no sean Nanite tengan LOD configurados o de lo contrario se vuelven extremadamente caras de renderizar en páginas pequeñas.
- Siempre que sea posible, es aconsejable pasar a mallas no deformables (sin materiales WPO/PDO) más allá de una distancia en la que el efecto sea evidente.
- La variable de consola de eliminación de CPU sigue siendo útil para la renderización de mallas no nanite en Mapas de sombras virtuales.
- Ajusta los valores de eliminación de CPU en objetos no Nanite renderizados en Mapas de sombras virtuales con la variable de consola
r.Shadow.RadiusThreshold. Puede ayudar a controlar el costo de los objetos pequeños en la distancia.
- Ajusta los valores de eliminación de CPU en objetos no Nanite renderizados en Mapas de sombras virtuales con la variable de consola
- Usa Sombras de campo de distancia para sombras lejanas de Objetos que no son de Nanite.
- Para las Luces direccionales, a menudo es necesario cambiar a Sombras de campo de distancia más allá de cierto rango, igual que los Mapas de sombras en cascada. Con los Mapas de sombras virtuales, solo la geometría que no sea Nanite pasará a utilizar las Sombras de campo de distancia, mientras que la geometría Nanite seguirá teniendo sombras con todo detalle.
- Desactivar la geometría no Nanite en las páginas gruesas puede aumentar el rendimiento.
- Desactivar la geometría no Nanite en páginas gruesas puede suponer a menudo un gran aumento del rendimiento, ya que la geometría no Nanite es generalmente ineficiente para renderizar en páginas grandes.
Las estadísticas de los Mapas de sombras virtuales pueden dar una idea de los recuentos de instancias que no son de Nanite:
| Nombre de la estadística | Descripción |
|---|---|
| Total | Cantidad total de instancias no Nanite ingresadas a la eliminación de GPU. Las instancias se seleccionan por separado para cada nivel de MIP/clipmap del mapa de sombras virtual. Por ejemplo, una sola instancia de Malla estática puede resultar en 48 instancias (8 niveles de MIP * 6 caras de Cube Map) para cada punto de luz que intersecte, 17 instancias para cada Luz direccional (en la configuración predeterminada hay 17 niveles de clipmap) y así sucesivamente. |
| Dibujadas | Cantidad de instancias realmente dibujadas en todos los mapas de sombras virtuales después de la eliminación. |
| Eliminadas por HZB | Cantidad de instancias eliminadas por estar ocluidas (por geometría Nanite) desde la perspectiva de la luz. |
| Máscara de página eliminada | Cantidad de instancias eliminadas por no coincidir con ninguna página requerida. Por ejemplo, esto representa Mallas estáticas que se descartan al dibujar en áreas ya almacenadas en caché. |
| Eliminadas por rectángulo vació | **Cantidad de instancias eliminadas debido a que no se superponen con ninguna página requerida. Por ejemplo, esto representa Mallas estáticas que se descartan al dibujar en áreas ya almacenadas en caché. |
| Eliminadas del campo | Cantidad de instancias que estaban fuera del campo de visión. |
Proyección de sombras
La categoría Proyección de sombras es el costo del muestreo de mapas de sombras utilizando el Trazado de rayos del mapa de sombras. Estas pasadas se encuentran en Lights | DirectLighting | UnbatchedLights y normalmente habrá una pasada de proyección de VSM por cada luz asociada. La pasada más cara suele ser el bucle principal de SMRT en VirtualShadowMapProjection. El resto debería tener un costo relativamente bajo.
Si la pasada de proyección está etiquetada como RayCount:Static en lugar de RayCount:Adaptive, se está tomando una ruta lenta.
La proyección de VSM descrita en esta sección es diferente de la proyección experimental de una pasada descrita en la sección siguiente.
La proyección de sombras es puramente una función de la cantidad total de muestras de mapas de sombras que se toman a través de la pantalla, y el rendimiento no depende de la cantidad de páginas o del almacenamiento en caché.
Cuando se utiliza el SMRT, todo se reduce a lo siguiente:
- Luces promedio por píxel
- Cuantas más luces toquen grandes partes de la pantalla, más cara será la renderización. Las luces que cubren pequeñas cantidades de píxeles en pantalla son más baratas, aunque sigue habiendo algunos costes fijos por luz.
- Hay que evitar que la mayoría de los píxeles de la pantalla estén ocupados por varias luces grandes.
- Rayos por píxel
- La suavidad visible de las sombras afecta al rendimiento debido al recuento de rayos adaptable. Prueba reducir el Radio de la fuente de las luces locales o el Ángulo de la fuente de las Luces direccionales antes de reducir cualquiera de los recuentos de rayos y muestras.
- Muestras por rayo
Esta configuración se establece mediante la configuración de escalabilidad de Sombra, pero puede ajustarse aún más si es necesario. Consulta la sección Trazado de rayos del mapa de sombras de esta página para obtener más información.
Generalmente, los costos de proyección de sombras son mucho más fáciles de controlar (compensación con calidad y ruido) que los costos de profundidad de sombras.
Proyección de una pasada
Esta función se considera experimental. Es probable que los nombres de las variables de consola de esta sección cambien.
Aunque las luces más pequeñas tienen un costo menor, siguen teniendo algunos gastos fijos de pasada. Esto se está abordando mediante el desarrollo de una solución de proyección de sombras de una pasada en la que la mayoría de las luces locales de una escena pueden evaluar eficazmente sus sombras en una sola pasada. La contribución de sombra de estas luces puede aplicarse de una sola vez mediante el sombreado agrupado.
Esta ruta se activa mediante las variables de consola r.UseClusteredDeferredShading 1 y r.Shadow.Virtual.OnePassProjection 1. Para las escenas con una gran cantidad de pequeñas luces locales, esto puede resultar en mejoras significativas en el rendimiento.
El uso de ciertas características de la luz impedirá que una luz se procese por lotes incluso cuando esté activada la Proyección de una pasada:
- Perfiles de textura
- Funciones de luz
- Canales de iluminación
- Luces rectangulares
- Luces direccionales (no hay ninguna ventaja en agruparlas, ya que cubren toda la pantalla)
En las siguientes capturas, la izquierda muestra una pasada de proyección de sombras por luz, frente a la proyección de una pasada de la derecha.
Haz clic en la imagen para ampliarla.
En la trayectoria predeterminada de la izquierda, cada luz local se acumula una a una con varias pasadas por luz. Esto es ineficiente para luces pequeñas que cubren un área de pantalla pequeña.
En la trayectoria predeterminada de la izquierda, cada luz local se acumula una a una con varias pasadas por luz. Esto es ineficiente para luces pequeñas que cubren un área de pantalla pequeña. En la nueva ruta de la derecha, todas las luces locales sombreadas se agrupan en una sola pasada de sombreado agrupado (BatchedLights). La Luz direccional todavía se hace en una pasada independiente; cubre toda la pantalla y por lo tanto no es un beneficio para agruparla.
Cada luz local sigue inyectándose en el volumen de translucidez por separado. Esto es menos problemático para el rendimiento que la proyección, pero es probable que también se agrupen por lotes en el futuro.
Cuando está activada la Proyección en una pasada es posible limitar el número de luces sombreadas que se filtran completamente por píxel al ajustar r.Shadow.Virtual.OnePassProjection.MaxLightsPerPixel del valor predeterminado de 16. Esto es útil tanto para controlar el rendimiento como para ahorrar una pequeña cantidad de memoria gráfica transitoria.
Si hay más luces sombreadas que el máximo en un píxel dado (o en la práctica, un mosaico de sombreado diferido agrupado), las luces adicionales se sombrearán mediante una búsqueda de sombra dura única de bajo costo. Esto puede provocar discontinuidades visuales si el valor se establece de forma demasiado agresiva, pero suele ser más indulgente que desactivar por completo las sombras para las luces que superan el recuento.
Esta pasada aún está en desarrollo y no está activada de forma predeterminada. La principal advertencia es que en los casos en que una luz local tenga tanto un mapa de sombras virtual como un mapa de sombras clásico (debido a algún tipo de geometría no soportada en la escena), la ruta de Proyección de una pasada ignora este último, lo que provoca que esas sombras desaparezcan.
Si ya estás usando r.Shadow.Virtual.ForceOnlyVirtualShadowMaps, debería ser seguro activar también la Proyección de una pasada. Una vez solventadas las limitaciones actuales, es probable que se convierta en la ruta utilizada de forma predeterminada.
Plataformas admitidas
Actualmente, los Mapas de sombras virtuales son compatibles con PlayStation 5, Xbox Series S|X y PC con tarjetas gráficas que cumplan las siguientes especificaciones y que utilicen los controladores más recientes con DirectX 12:
- NVIDIA: tarjetas de la generación Maxwell o posteriores.
- AMD: tarjetas de la generación GCN o posteriores.
- Todas las versiones más recientes de Windows 10 (anteriores a la versión 1909.1350) y Windows 11 compatibles con DirectX 12 Agility SDK.
- Windows 10 versión 1909. El número de revisión debe ser superior o igual a .1350.
- Windows 10 versión 2004 y 20H2. El número de revisión debe ser superior o igual a .789.
- DirectX 12 (con atómicos de Shader Model 6.6), o Vulkan (VK_KHR_shader_atomic_int64).
- Controladores gráficos más recientes.
Problemas y limitaciones
Los Mapas de sombras virtuales siguen desarrollándose activamente. Su uso presenta una serie de problemas y limitaciones conocidos, y por el momento están dirigidos a computadoras de escritorio de gama alta y consolas de nueva generación.
Rendimiento de luces múltiples
El rendimiento en escenas con muchas luces locales pequeñas es todavía un trabajo en progreso. Por el momento, la mejor estrategia es activar la proyección de una pasada y tener mucho cuidado con las invalidaciones para mantener la mayor cantidad posible de páginas en caché. Las luces locales múltiples funcionarán mucho mejor con la geometría de Nanite que con la geometría que no es de Nanite, por lo que eliminar o desactivar agresivamente la proyección de sombras en la geometría que no es de Nanite en la distancia puede ayudar mucho. En algunos casos puede ser deseable desactivar la proyección de sombras dinámicas en las luces distantes por completo y confiar únicamente en las Sombras de contacto del espacio en pantalla.
En el futuro, se dispondrá de mejores controles para realizar compensaciones algorítmicas y de calidad, así como para acelerar las actualizaciones en estas situaciones.
Geometría de baja poligonización
La geometría de baja poligonización con alta curvatura y normales suaves puede presentar artefactos. Esto se conoce como el "problema del terminador de sombras". También se produce en el trazado de rayos y otras consultas de visibilidad de alta precisión. El problema proviene del desajuste entre la geometría real de baja poligonización y las normales de sombreado "suaves": en la zona cercana al terminador algunas de estas caras están geométricamente en sombra, pero las normales de sombreado no geométricas están ligeramente orientadas hacia la luz. Es común trabajar alrededor de este artefacto con un sesgo basado en normales para la búsqueda de sombras. Este artefacto en particular puede ser más notable con Mapas de sombras virtuales porque están configurados de forma predeterminada para ofrecer sombras muy detalladas de la geometría de Nanite.
La mejor manera de solucionar esto es aumentar la cantidad de polígonos en estos objetos/regiones. Limitar la divergencia entre las normales geométricas y de sombreado reduce o elimina estos artefactos sin afectar negativamente a la calidad de las sombras en otros lugares. Con Nanite, añadir más polígonos es sencillo y, en general, barato. Si los objetos ofensivos no pueden usar Nanite, añadir un mayor nivel de detalle (LOD) a menudo también funciona bien, ya que estos artefactos son en su mayoría visibles cuando los objetos están cerca de la cámara.
Si no es posible añadir más geometría, se puede aumentar el sesgo normal del Mapa de sombras virtual mediante r.Shadow.Virtual.NormalBias (0,5 de forma predeterminada). Ten en cuenta que esto solo debe considerarse cuando no sea posible realizar ajustes de contenido, ya que afectará negativamente a la calidad de las sombras en toda la escena, pero especialmente en las zonas de detalles finos.
En los ejemplos siguientes, los artefactos son visibles en una esfera con pocos polígonos cerca de la cámara con geometría muy detallada en el fondo. Añadir polígonos a la esfera mejora los artefactos sin afectar negativamente al detallado paisaje del fondo.


Ajustar el sesgo también mejora los artefactos, pero se pierden visiblemente detalles finos en la geometría del fondo.


Realidad virtual
La realidad virtual aún no es totalmente compatible con los Mapas de sombras virtuales. Es probable que haya artefactos con Luces direccionales en el ojo derecho.
Pantalla dividida
La pantalla dividida fue objeto de pruebas mínimas y puede tener un rendimiento deficiente.
Desbordamiento del conjunto de páginas físicas
Con los Mapas de sombras virtuales, todos los datos de sombras de la escena para todas las luces se almacenan en un único conjunto de texturas de gran tamaño. El tamaño predeterminado del conjunto se ve afectado por la configuración de Escalabilidad de sombras, pero puede ser necesario ajustarlo en escenas con muchas luces que utilicen sombras de alta resolución.
Alternativamente, puede ser necesario ajustarlo en hardware de gama baja para ahorrar memoria de video.
El tamaño del conjunto de páginas puede ajustarse mediante r.Shadow.Virtual.MaxPhysicalPages. Al activar las estadísticas del Mapa de sombras virtual con r.ShaderPrintEnable 1 y r.Shadow.Virtual.ShowStats 2, sucesivamente, se mostrarán estadísticas sobre el uso actual del pool de páginas.
Ejemplo del uso actual del grupo de páginas a partir de las estadísticas en pantalla del Mapa de sombras virtual.
Si la cantidad de Páginas excede el Máximo de páginas se producirá corrupción, que a veces se manifiesta visualmente como un patrón de tablero de ajedrez, o sombras corruptas o ausentes. Si la reserva de páginas de sombra se desborda, se muestra una advertencia en pantalla y en el registro.
Ejemplo de mapas de sombras virtuales dañados por una cantidad excesiva de páginas en el conjunto de páginas.
Si esto ocurre, aumenta el tamaño del conjunto de páginas o disminuye la resolución de la sombra o la cantidad de luces de proyección del mapa de sombras virtual.
Captura de escena
En algunos casos, los componentes de Captura de escena pueden provocar la invalidación de toda la caché del Mapa de sombras virtual. Los síntomas de esto normalmente se manifiestan como Invalidaciones bajas en las estadísticas del Mapa de sombras virtual, pero las páginas almacenadas en caché también son bajas (o a veces incluso cero) y la visualización de Páginas en caché es uniformemente roja.
Si esto ocurre, intenta ocultar/eliminar cualquier actor de Captura de escena en la escena para verificar si están provocando el problema.
Actualmente no hay otra solución que desactivar la Captura de escena cuando esto ocurre.
Materiales
Solo se admiten materiales simples de subsuperficie. El Perfil de subsuperficie y la transmisión aún no están implementados se implementaron. Si un material los utiliza, ese material tendrá sombra como si fuera opaco.
Resolución de sombras
Los Mapas de sombras virtuales ofrecen una resolución significativamente mayor que los mapas de sombras convencionales, pero los ángulos de luz poco profundos (o aliasing proyectivo) y las luces locales muy grandes pueden agotar la resolución virtual disponible. Esto puede presentarse como sombras en forma de caja y problemas de sesgo dependiendo de la superficie de la geometría.
Los clipmaps de Luz direccional son mucho menos susceptibles de quedarse sin resolución, pero los campos de visión de cámara muy estrechos pueden acabar agotándolos también.
No existe una solución sencilla para resolver el aliasing proyectivo con mapas de sombras. Incluso con mapas de sombras virtuales, hay que tener cuidado para evitar los peores casos y equilibrar la resolución con el rendimiento.
Advertencias de comprobación de mapas
Los Mapas de sombras virtuales provocan algunas advertencias de comprobación de mapas inexactos:
- El mensaje La iluminación debe reconstruirse no aparece cuando los mapas de sombras virtuales están activados, aunque es posible que la iluminación deba reconstruirse si no se utilizan las funciones de Reflejos e iluminación global de Lumen. Mientras que la iluminación directa estacionaria es dinámica con los Mapas de sombras virtuales activados, la iluminación indirecta estacionaria se sigue integrando.
- Las advertencias relativas a las presombras pueden ignorarse, ya que no son relevantes cuando se utilizan Mapas de sombras virtuales.



