Маска полутени
Разрабатываю свой движок #ForceEngine на базе ресурсов игр #Thief и #SystemShock2 .
Маска полутени (penumbra mask) - прием оптимизации, который позволил обрабатывать в риалтайме динамические мягкие тени от всех объектов и от каждого источника света на уровне.
"Острые" края теней приобретают "мягкость" за счет дополнительных выборок (сэмплирования) из карты теней (shadow map), но это очень ресурсозатратная операция. Поэтому, чтобы сэкономить и не сэмплировать места, где точно не может быть полутеней, создается маска полутени. Закрашенные зеленым фрагменты на видео - это и есть эта маска. Именно здесь карта теней сэмплируется дополнительными выборками.
Шаги построения маски:
Для каждого источника строится буфер глубины, по нему определяются грани видимой источником геометрии. Эта информация записывается в тот же фреймбуфер и имеет такое же разрешение, что и тени. А затем для неё строится цепочка мип-уровней. Таким образом, если мы будем сэмплировать из более низких уровней, получим оптимальное покрытие в тех местах, где тень должна размываться - на границах.
Подписывайтесь, чтобы не пропускать новости проекта!