Недавно при поиске решения проблемы теневых угрей традиционного картирования теней я реализовал экспоненциальные карты теней. Он сделал свое дело (без прыщей вообще), но в то же время внес другие недопустимые ошибки.
Для размытия карты глубины я использую размытие по Гауссу с наименьшей сигма = 1.
Тест для карты теней:
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);
с малым фактором c c=100.0
:
Недопустимое легкое кровотечение
с высоким фактором c c=5000.0
:
Нет легкого кровотечения, но высокочастотные детали выглядят «опухшими».
Не могу найти оптимальное c - легкое кровотечение появляется даже на c=3000.0
высокой частоте и ошибка тени уже есть. Помогает не размывание карты глубины, но затем происходит наложение.
И мой вопрос - как я могу улучшить эту технику (ESM) или я должен искать другую? Я думаю, что хорошее качество теней с хорошей производительностью, безусловно, возможно - как видно в современных играх, таких как Witcher 3 или Fallout 4.