поиск приемлемых качественных методов картирования теней

8

Недавно при поиске решения проблемы теневых угрей традиционного картирования теней я реализовал экспоненциальные карты теней. Он сделал свое дело (без прыщей вообще), но в то же время внес другие недопустимые ошибки.

Для размытия карты глубины я использую размытие по Гауссу с наименьшей сигма = 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.

притвор
источник

Ответы:

2

ОК, не бери в голову. Я провел небольшое исследование и собираюсь:

  • сэмплируйте ESM, используя сэмплирование Пуассона в стиле PCF (спасибо Барту Вронски (Bart Wronski) за отличное приложение Генератор сэмплирования Пуассона) и распространите его на технику PCSS (переменная полутень). Рендеринг в текстуру.
  • опционально размытие с учетом глубины, чтобы смягчить - РЕДАКТИРОВАТЬ не так быстро, эта опция работает не так, как ожидалось, слишком плохо. Вместо этого вращающееся ядро ​​PCF работает нормально.

И очень плохо, не так много дискуссий здесь.

притвор
источник