Эта проблема выглядит как стандартные артефакты прыщей карты теней. Кроме того, ваше уравнение освещения является неполным или неправильным. Свет не должен влиять на лица с нормалью, направленной от него. Это также означает, что при правильном уравнении «темная» сторона сферы не должна иметь никаких артефактов от прыщей.
Есть три источника артефактов прыщей:
- Первым источником прыщей является точность карты теней. Убедитесь, что ближняя и дальняя плоскости света, отбрасывающего тень, как можно плотнее. Все объекты перед ближней плоскостью могут быть блины, так как их точная глубина не важна.
- Вторым источником прыщей является разрешение карты теней. Для направленного света вы должны делать каскадные карты теней, по крайней мере, с 3 каскадами 1024x1012 для ~ 100-200 м расстояния тени. Трудно покрыть одинаковое расстояние тени одной картой теней с равномерной проекцией.
- Третий источник прыщей - это фильтр широкой карты теней, такой как PCF, поскольку использование единого значения сравнения глубины глубины в широком ядре недостаточно. Есть много способов исправить это, но ни один из них не является надежным.
Подводя итог, достаточно узкого усеченного конуса с несколькими каскадами и некоторой подстройкой смещения, чтобы заставить работать общий случай (направленный свет). Начните настройку, отключив теневую фильтрацию, и настройте фильтрацию только тогда, когда базовые карты теней достаточно надежны.
Кроме того, помимо постоянного смещения глубины (которое вы используете в настоящее время), вы также должны добавить смещение глубины наклона и максимальное смещение глубины наклона. Оба могут быть реализованы либо как состояние рендеринга, либо как код шейдера во время рендеринга карты теней. Смещение глубины наклона - это просто магическое значение смещения, масштабированное точкой (нормальное, lightDir).
Есть несколько дополнительных интересных методов, и большинство из них реализованы в отличной демоверсии: Matt Pettineo - «Выборка теневых техник» .
- Отбрасывание во время рендеринга карты теней (меняет угри на панорамирование Питера).
- Нормальное смещение теневого отображения делает чудеса для проблем смещения, но требует, чтобы во время затенения были нормали вершин.
- Методы, основанные на дисперсии (ESM, VSM, EVSM), полностью устраняют проблемы смещения, но имеют другие недостатки (слабые утечки и / или проблемы с производительностью).