CubeMap тени требуют несколько проходов геометрии, что не очень хорошо.
Поискав решения этой проблемы нашёл два варианта создания таких теней:
- (1) CubeMap
- (A) Шесть проходов по геометрии
- (B) Один вывод геометрии, и обработка её в геометрическом шейдере
- (2) Dual-paraboloid matrix
В данный момент используется 1.A вариант, но это временно и в будущем планируется перейти на 1.B.
Таким образом можно избежать лишних вызовов API и переложить всё это на силы GPU.
Можно в 3 раза сократить проходы, используя метод 2, но у него недостаток в том, что при слабой тессаляции геометрии появляются дефекты.
В целом интересный метод, но для игровых объектов не очень годиться из-за своего недостатка.
Пример искажения перспективы через параболическую матрицу виден на этом видео:
Линки на тему:
Dual-Paraboloid Shadow Maps (Kyle Hayward)
Динамические тени, основаные на CubeMap (SVSD_VAL)
Моделирование стеклянных поверхностей (Sergio)
Ссылка | Комментарии [2]