1. Entretenimiento
  2. »
  3. Taringa!
  4. »
  5. Info

Cascaded Shadow Maps de Unreal Engine 4









Cascaded Shadow Maps


Los shadow maps son una técnica común para añadir sombras a los juegos. La idea básica es testear cuando un pixel es visible desde la fuente de luz, si no es visible, entonces hay sombra.

El algoritmo consiste en dos pasadas: la primera construye un mapa de profundidad (a veces llamado shadow depth map) en el espacio de luces; la segunda compara la profundidad de cada pixel (en espacio de luces) con la correspondiente profundidad en el mapa calculado en el paso uno. Si el pixel (x,y) tiene mayor profundidad (z) que el valor (x,y) en el shadow depth buffer significa que la luz está ocluida y por tanto hay que pintar sombra en dicho pixel.


Partiendo de esta escena de ejemplo:




El algoritmo shadow map hace su primera pasada donde construye el shadow depth buffer (que es básicamente una textura) en light-space desde la fuente de luz. Piensa que es como si renderizaras la escena pero no desde la cámara, si no con la fuente de luz cómo la cámara y almacenaras el z-buffer resultante en una textura. Esa textura es el shadow depth buffer.



En su segunda pasada se comparan las profundidades del pixel (en lights pace) con el depth buffer previamente calculado para saber si dicho pixel recibe sombra o no. El depth buffer previo se usa, por lo tanto, para saber que pixel están ocluido de la luz. Si el pixel (x,y) cuya profundidad (z) en coordenadas lightspace es mayor que el valor (x,y) en el shadow depth map significa que la luz “no ve” ese pixel y por tanto en dicho pixel debe pintarse sombra.



Esta técnica es ampliamente usada en todos los motores de render en tiempo real.



Artefactos


Este algoritmo presenta varios artefactos muy comunes:


Perspective Aliasing:


Ocurre cuando al “mapear” los pixeles desde el viewspace a texels en el shadow buffer (que es una textura) no están en ratio 1 a 1. Esto es debido a que cerca de la cámara los pixeles son más cercanos los unos a los otros y requieren una resolución shadow depth map mayor.



En la siguiente imagen se ilustra la resolución del depth map junto al frustum de la cámara. Cuanto más cerca de la cámara necesitamos más resolución y cuanto más lejos necesitaremos menos resolución.



La técnica más común para resolver este artefacto es usar Cascaded Shadow Maps (CSM). La idea es dividir el frustum de la cámara y usar para cada división un depth buffer de mayor resolución cuanto más cerca de la cámara esté.



Shadow Acne:


Ocurre cuando los valores en shadow depth buffer son muy cercanos al depth buffer de cada pixel y al comparar dichos valores tan cercanos se cometen errores (floating point).



Se resuelve ajustando un valor, comúnmente llamado ‘bias’ que añade como offset al depth buffer, de este modo se resuelve el error al comparar floats tan cercanos.



Peter Panning:


Este artefacto ocurre precisamente al intentar arreglar el artefacto anterior. Al usar un ‘bias’ demasiado alto se puede caer en una mala comparación.



Con el valor de ‘bias’ correcto se consigue evitar el Acne y el Peter Panning:






Comunidad Unreal Engine 4 en Taringa!





+34
6
0
6Comentarios