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