Освещение является одним из главных факторов, формирующих визуальное восприятие трёхмерной сцены. Без теней объекты выглядят «плоскими» и оторванными от поверхности, пространственные отношения между ними становятся неочевидными [1, с. 45]. Существует несколько подходов к расчёту теней: трассировка лучей (ray tracing), теневые объёмы (shadow volumes) и теневые карты (shadow mapping). Несмотря на развитие аппаратной трассировки лучей, shadow mapping остаётся доминирующим методом из-за предсказуемой производительности и простоты реализации на массовом оборудовании [2]. Целью данной работы является рассмотрение принципов shadow mapping, анализ типичных артефактов и обзор методов их устранения.
Принцип работы классического shadow mapping
Базовая идея shadow mapping — двухпроходный рендеринг сцены [3, с. 112]. На первом проходе сцена рендерится из точки зрения источника света: сохраняется только карта глубины (расстояние от источника до ближайшей поверхности). Полученное изображение называется теневой картой (shadow map).
На втором проходе сцена рендерится с точки зрения камеры. Для каждого фрагмента вычисляется его положение в системе координат источника света и полученная глубина сравнивается со значением из теневой карты [4]. Если глубина фрагмента больше — он в тени, иначе — освещён. Главное преимущество: универсальность для произвольной геометрии, нативная поддержка в DirectX, Vulkan, OpenGL [5]. Вместе с тем метод порождает ряд характерных артефактов.
Типичные артефакты и способы их устранения
Shadow acne («теневые угри») — полосатый муаровый узор на освещённых поверхностях [3, с. 118]. Причина: из-за дискретизации глубины поверхность может ошибочно затенять саму себя. Решение — смещение глубины (depth bias / slope-scaled bias), которое сдвигает сравниваемую глубину, устраняя самозатенение [6].
Избыточное смещение порождает peter-panning — тень визуально «отрывается» от объекта [7, с. 54]. Для дополнительного контроля применяют normal offset bias, сдвигающий точку сэмплирования вдоль нормали поверхности.
Алиасинг краёв теней («ступенчатость» границ) возникает при недостаточном разрешении теневой карты относительно покрываемой области экрана [8]. Для устранения используется ряд методов, описанных далее.
PCF, каскадные теневые карты и VSM
Percentage Closer Filtering (PCF) вместо одного сравнения выполняет несколько выборок из соседних ячеек теневой карты (например, сетка 3×3 или 5×5) и усредняет результаты [9, с. 67]. Это создаёт плавный переход между освещённой и затенённой областью и частично решает проблему алиасинга.
Для больших открытых сцен одна теневая карта не обеспечивает приемлемое качество как для близких, так и для удалённых объектов. Решение — Cascaded Shadow Maps (CSM) [10]: пространство видимости камеры делится на несколько диапазонов глубины, для каждого строится отдельная теневая карта. Ближние каскады имеют высокое разрешение на единицу площади, дальние — пониженное. CSM с PCF — стандарт де-факто для направленного освещения в открытых сценах [7, с. 203].
Variance Shadow Maps (VSM) [11] вместо одного значения глубины хранят среднее и дисперсию, что позволяет аппроксимировать долю закрытых сэмплов через неравенство Чебышева. Метод даёт мягкие тени без множества выборок, как в PCF, однако страдает от light bleeding — «протекания» света через тонкие объекты [12, с. 88]. В современных движках теневые карты дополняются контактными тенями и SSAO для мелких деталей [13].
Сравнение рассмотренных методов представлено в таблице 1.
Таблица 1
Сравнение методов формирования теней
|
Метод |
Основное преимущество |
Основной недостаток |
|
Shadow mapping (базовый) |
Универсальность, поддержка GPU |
Shadow acne, peter-panning, алиасинг |
|
PCF |
Сглаживание границ теней |
Рост числа выборок текстуры |
|
CSM |
Качество для больших открытых сцен |
Сложность настройки каскадов |
|
VSM |
Мягкие тени без множества выборок |
Light bleeding |
Заключение
Shadow mapping остаётся базовым методом формирования теней в рендеринге реального времени благодаря универсальности и предсказуемой нагрузке на GPU. Классическая реализация порождает характерные артефакты, устраняемые с помощью PCF, CSM и VSM. На практике современные движки комбинируют CSM и PCF, дополняя контактными тенями и ambient occlusion. Дальнейшее развитие связано с гибридизацией shadow mapping и аппаратной трассировки лучей.
Литература:
- Akenine-Möller T., Haines E., Hoffman N. Real-Time Rendering. — 4th ed. — CRC Press, 2018. — 1200 с.
- Williams L. Casting curved shadows on curved surfaces // ACM SIGGRAPH Computer Graphics. — 1978.
- Eisemann E., Schwarz M., Assarsson U., Wimmer M. Real-Time Shadows. — CRC Press, 2011. — 284 с.
- Common Techniques to Improve Shadow Depth Maps [Электронный ресурс] // Microsoft Learn. URL: https://learn.microsoft.com (дата обращения: 03.11.2025).
- Vulkan Shadow Mapping Tutorial [Электронный ресурс] // Vulkan Documentation. URL: https://docs.vulkan.org (дата обращения: 03.11.2025).
- Dou H., Yan Y., Kerzner E. et al. Adaptive Depth Bias for Shadow Maps // Journal of Computer Graphics Techniques. — 2014. — Vol. 3, No. 4.
- Akenine-Möller T., Haines E., Hoffman N. Real-Time Rendering. — 4th ed. — CRC Press, 2018. — Разделы Shadow Techniques, CSM.
- Scherzer D., Wimmer M., Purgathofer W. A survey of real-time hard shadow mapping methods // Computer Graphics Forum. — 2011.
- Percentage-Closer Soft Shadows [Электронный ресурс] // NVIDIA GameWorks. URL: https://developer.nvidia.com (дата обращения: 04.11.2025).
- Engel W. Cascaded Shadow Maps // ShaderX. — 2007.
- Donnelly W., Lauritzen A. Variance Shadow Maps // ACM SIGGRAPH Symposium on Interactive 3D Graphics and Games. — 2006.
- Lauritzen A. Summed-Area Variance Shadow Maps // GPU Gems 3. — NVIDIA, 2008.
- Screen Space Ambient Occlusion and Contact Shadows [Электронный ресурс] // GDC Vault. URL: https://www.gdcvault.com (дата обращения: 05.11.2025).

