buscando técnicas de mapeo de sombras de calidad aceptable

8

Recientemente, mientras buscaba resolver el problema del acné en las sombras del mapeo de sombras tradicional, implementé mapas de sombras exponenciales. Hizo el truco (sin acné en absoluto) pero al mismo tiempo introdujo otros errores inaceptables.

Para el desenfoque del mapa de profundidad, uso el desenfoque gaussiano con la sigma más pequeña = 1.

Prueba de mapa de sombra:

float occluder = texture(shadowMap lightCoords.xy).r;
float c = 5000.0;
float receiver = lightCoords.z;
float shadow = exp(c*(occluder-receiver));
shadow = clamp(shadow, 0.0, 1.0);

con factor c pequeño c=100.0:

ingrese la descripción de la imagen aquí

Sangrado leve inaceptable

con alto factor c c=5000.0:

ingrese la descripción de la imagen aquí

No hay sangrado leve pero los detalles de alta frecuencia parecen "hinchados".

No se puede encontrar el óptimo c - el sangrado de luz aparece incluso en c=3000.0y el error de sombra de alta frecuencia ya está allí. No difumina el mapa de profundidad, pero se produce un alias.

Y mi pregunta es: ¿cómo puedo mejorar esta técnica (ESM) o debería buscar otra? Creo que las sombras de buena calidad con un buen rendimiento son definitivamente posibles, como se ve en juegos modernos como Witcher 3 o Fallout 4.

narthex
fuente

Respuestas:

2

Bueno, olvidalo. Investigué un poco y en realidad voy a:

  • muestra ESM usando el muestreo de Poisson a la manera de PCF (gracias Bart Wronski por la excelente aplicación de generador de muestras de Poisson) y extienda esto a la técnica PCSS (penumbra variable). Renderizar a la textura.
  • opcionalmente, el borrón consciente de la profundidad se suaviza: EDITAR no es tan rápido, esta opción no funciona como se esperaba, muy mal. En cambio, el núcleo PCF giratorio parece funcionar bien.

Y lástima que no haya mucha discusión aquí.

narthex
fuente