Нет ничего особенного в отложенном рендеринге, который требует уникальных методов затенения. Большинство стандартных подходов к созданию теней прекрасно работают со схемами отложенного рендеринга.
Shadow Mapping - наиболее распространенный алгоритм теневого копирования, используемый сегодня в приложениях реального времени, таких как игры. Трафаретные тени были популярны несколько лет назад, но немного потеряли популярность из-за различных ограничений. Shadow Mapping отлично работает с отложенным затенением. Основной алгоритм для теневого отображения достаточно прост:
- Глубина рендеринга в текстуру цели рендера с точки зрения источника света (для точечного источника света необходимо визуализировать 6 граней карты куба).
- Когда вы выполняете проход освещения для света, для каждого пикселя преобразуйте положение в мировом пространстве в пространство просмотра источника света и сравните глубину с глубиной, сохраненной в карте теней. Если она больше глубины карты теней, то точка находится в тени, в противном случае ее обычно освещают.
Как обычно при рендеринге, дьявол кроется в деталях. Для получения теней хорошего качества необходимо тщательно настроить проекцию карты теней, чтобы наилучшим образом использовать пиксели, доступные на карте теней (поиск перспективных карт теней, каскадных карт теней). Из-за проблем с точностью вы получите различные артефакты с самозатеняющимися поверхностями («угревая сыпь тени» является наиболее распространенным), и существуют различные стратегии для уменьшения частоты появления этих артефактов (смещение глубины, настройки матрицы проекции). Чтобы уменьшить блочный пиксельный вид карт теней с недостаточным разрешением, вы, вероятно, захотите выполнить некоторую фильтрацию карт теней. Процентная фильтрация является стандартным подходом, и существуют различные способы выполнения PCF.
Вы также сталкиваетесь со стандартным компромиссом между качеством и производительностью с тенями, и динамическое затенение, как правило, является одним из самых дорогих аспектов рендеринга сцены. Существует множество приемов и приемов, позволяющих максимально повысить производительность картирования теней.
В последнее время произошел ряд изменений в базовом алгоритме отображения теней, которые пытаются дать лучшие результаты для данного разрешения карты теней, подходя к проблеме фильтрации по-другому. Variance Shadow Maps и Exponential Shadow Maps - это две последние методики, которые имеют некоторые приятные преимущества, но имеют свои уникальные проблемы.
Сайт разработчика Nvidia является хорошим ресурсом для графического программирования в целом и содержит множество статей по теневанию. Взгляните на HTML-версии книг GPU Gems, доступных на сайте, и в них есть различные статьи по теневому копированию, включая исчерпывающую статью о Variance Shadow Maps в GPU Gems 3.