The article is devoted to the Screen Space Ambient Occlusion (SSAO) technique — a method of simulating global illumination in real-time rendering. The theoretical foundations of ambient occlusion, the algorithm's working principles, its stages, main artifacts and ways to eliminate them are discussed.
Keywords : rendering, ambient occlusion, screen space, shading, global illumination, G-buffer, shader.
Введение
В компьютерных играх и интерактивных приложениях реалистичность изображения во многом определяется корректным моделированием тени от рассеянного освещения. Техника Screen Space Ambient Occlusion (SSAO) была предложена разработчиками CryEngine 2 в компании Crytek в 2007 году и с тех пор стала стандартным инструментом постобработки в рендеринге реального времени [1, с. 4]. Целью данной статьи является изложение теоретической базы и практических принципов работы SSAO.
1. Понятие Ambient Occlusion
Ambient Occlusion (AO) — метод затенения, аппроксимирующий, какую долю рассеянного света достигает точки поверхности с учётом окружающей геометрии [2, с. 14]. Значение AO в точке соответствует доле полусферы над нормалью, не перекрытой другими объектами: чем сильнее точка «закрыта», тем темнее она выглядит.
В офлайн-рендеринге AO вычисляется методом Монте-Карло — каждый луч трассируется в полусфере, что обеспечивает физическую точность, но требует тысяч лучей на пиксель и неприменимо в реальном времени [2, с. 19]. Визуальный эффект хорошо известен: углы комнат, основания объектов и стыки поверхностей выглядят темнее. Без AO сцены кажутся неестественно «плоскими».
2. История создания SSAO
До 2007 года разработчики либо отказывались от AO, либо запекали его в текстуры на этапе создания ресурсов. Запечённые карты не обновляются в реальном времени и не учитывают динамические объекты [3]. Ведущий разработчик CryEngine 2 Владимир Казаков предложил аппроксимировать AO непосредственно во время рендеринга, используя только информацию из G-буфера. В дальнейшем появились HBAO (NVIDIA, 2008), HBAO+, а также физически точный GTAO (2016). Тем не менее базовый SSAO остаётся популярным благодаря простоте реализации и производительности.
3. Принцип работы алгоритма SSAO
SSAO является постобработочным алгоритмом и применяется после рендеринга сцены в G-буфер. Алгоритм состоит из четырёх этапов.
Подготовка G-буфера. Выполняется проход отложенного рендеринга, формирующий буфер глубины и буфер нормалей. Глубина конвертируется в пространство вида для корректных 3D-вычислений [5, с. 2].
Генерация ядра выборки. Для каждого пикселя формируется набор случайных точек (16–64) в полусфере, ориентированной по нормали. Распределение смещено к началу полусферы, так как ближайшая геометрия вносит наибольший вклад в окклюзию. Небольшая текстура шума (4×4 пикселя), тайлящаяся по экрану, вращает ядро в каждом пикселе, снижая заметность паттернов [5, с. 3].
Тест окклюзии. Каждая точка выборки проецируется в экранное пространство; реальная глубина G-буфера сравнивается с глубиной точки. Если реальная поверхность ближе к камере, точка считается окклюдированной. Итоговая оценка — доля окклюдированных точек. Для устранения самозатенения вводится смещение по глубине и проверка дальности [6, с. 8].
Размытие результата. Зашумлённая карта окклюзии сглаживается фильтром с учётом краёв, сохраняя резкие границы объектов [5, с. 7].
4. Типичные артефакты
Ореолы (halo). Тёмный контур вокруг объектов на контрастном фоне — следствие промаха сэмплов мимо реальной геометрии. Устраняется отсечением сэмплов по нормали и уменьшением радиуса ядра [5, с. 9].
Утечки окклюзии. Геометрия за пределами кадра не учитывается, поэтому объекты у края экрана затеняются некорректно [6, с. 13].
Самозатенение. При недостаточном bias плоские поверхности затеняют сами себя. Для борьбы с зашумлённостью применяется temporal SSAO — ротация ядра выборки между кадрами с усреднением результата [7].
Заключение
Screen Space Ambient Occlusion представляет собой практичный компромисс между физической корректностью и требованиями реалтаймового рендеринга. Стоимость алгоритма определяется разрешением экрана и числом сэмплов, а не сложностью сцены, что делает SSAO применимым даже на мобильных платформах. Главное ограничение метода — работа исключительно в экранном пространстве, порождающая характерные артефакты. Современные варианты — HBAO и GTAO — в значительной мере преодолевают эти ограничения и используются в Unity, Unreal Engine 5 и других ведущих движках. Знание принципов SSAO необходимо любому разработчику в области рендеринга, поскольку метод лежит в основе более современных подходов.
Литература:
- Kazakov V. Screen Space Ambient Occlusion. — CryEngine SDK Documentation, Crytek GmbH, 2008.
- Akenine-Moller T., Haines E. Real-Time Rendering. — 4th ed. — CRC Press, 2018. — ISBN 978–1–1386–2700–0.
- Shirley P., Chiu K. A Low Distortion Map Between Disk and Square // Journal of Graphics Tools. — 1997. — Vol. 2, № 3. — С. 45–52.
- Bavoil L., Sainz M. Screen Space Ambient Occlusion [Электронный ресурс] // NVIDIA Developer. — 2008. — URL: https://developer.download.nvidia.com/SDK/10.5/direct3d/Source/ScreenSpaceAO/doc/ScreenSpaceAO.pdf (дата обращения: 15.05.2025).
- Mittring M. Finding Next Gen: CryEngine 2 // Proceedings of ACM SIGGRAPH 2007 Courses. — New York: ACM, 2007. — С. 1–17.
- de Vries J. SSAO [Электронный ресурс] // Learn OpenGL. — URL: https://learnopengl.com/Advanced-Lighting/SSAO (дата обращения: 10.05.2025).
- Stalker J. Ground Truth Ambient Occlusion [Электронный ресурс] // Epic Games Developer Documentation. — URL: https://dev.epicgames.com/documentation/en-us/unreal-engine/ambient-occlusion-in-unreal-engine (дата обращения: 12.05.2025).

