Я возлюсь с простым процедурным 3D-моделированием, чтобы сделать маленькие здания для 3D-печати. Пример:
Чтобы сделать модели более читабельными на экране, я реализовал базовое отображение теней для одного направленного света. Поскольку моя сцена не меняется, я просто визуализирую карту теней один раз с помощью выровненного по оси блока сцены, чтобы выяснить, какими должны быть границы карты теней. Тени и границы выглядят так, как будто у меня все матрицы правильные, но подход немного ближе выглядит ужасно:
Из прочитанного мною чтения я понимаю панорамирование Питера и то, что я могу с этим сделать, но неровные края, которые, как я считаю, являются формой проективного алиасинга, выглядят настолько плохо, что я думаю, что что-то не так в моей базовой реализации.
Я взломал пиксельный шейдер, чтобы показать границы теневого текселя:
У меня есть билинейная фильтрация в текстуре (без нее я получаю серьезные теневые прыщи). К сожалению, моя попытка PCF тоже не удалась - она выглядит так же рваной:
Вот один пример с отключенной билинейной фильтрацией:
Похоже ли это на «типичное» проективное алиасинг? Может ли динамический рендеринг карты теней с использованием усеченного вида, привязанного к сцене, возможно с каскадом, решить проблему?
Изменить: добавление крупным планом билинейной фильтрации, сравнение теней, просто чтобы показать, что я получаю. Плохие тени прыщей появляются из-за внутренних краев; Я моделирую со сложенными виртуальными блоками и не выполняю правильную операцию объединения. Из моего прочтения реализация логических операций на многогранниках не тривиальна, но также позволит мне реализовать статические теневые объемы, а также очистить некоторые программы для 3D-печати.
источник
Вы сказали, что "... билинейная фильтрация в текстуре ...". Кажется, вы интерполируете значения глубины карты теней. Правильный способ использования интерполяции с картой теней - применить ее к результатам тестов теней (насколько я помню, OpenGL поддерживает это). Вы можете даже объединить интерполяцию результатов теневых тестов с PCF, что даст гораздо лучшие результаты. Однако, как вы могли заметить, псевдонимы - это чума, которая всегда преследует карты теней :)
Хотя я понимаю, что вы ищете решения, касающиеся теневого отображения (даже потому, что оно довольно просто реализовать), вы когда-нибудь задумывались об использовании теневых объемов? Его гораздо сложнее реализовать, но он не страдает от наложения алиасов вообще, и я думаю, что он будет соответствовать вашим целям.
источник