SSAO — метод ambient occlusion в компьютерных играх¶
SSAO (англ. Screen Space Ambient Occlusion, «экранно-пространственное затенение окружения») — метод аппроксимации ambient occlusion в реальном времени, предложенный студией Crytek в 2007 году и впервые применённый в игре Crysis. Метод оценивает, насколько каждая точка экрана закрыта окружающими геометрическими объектами, и затемняет соответственно освещённые пиксели, добавляя сцене объём и глубину. SSAO и его разновидности стали стандартом реального времени и встроены в большинство игровых движков: Unreal Engine, Unity, Source 2, Frostbite, Godot.
¶Принцип работы
Ambient occlusion (AO) — физическое явление: в местах, закрытых от рассеянного света окружающими поверхностями (углублениях, щелях, под мебелью), освещённость ниже. Точный расчёт AO требует интегрирования по полусфере вокруг точки — операции, слишком дорогой для рендеринга в реальном времени в XXI веке.
SSAO обходит проблему, отказываясь от знания о сцене за пределами буфера глубины. Алгоритм работает в экранном пространстве:
- Для каждого пикселя берётся позиция в мировых координатах, восстановленная из карты глубины (depth buffer).
- Вокруг точки в мировом пространстве сэмплируется набор точек (обычно от 8 до 64) в пределах сферы/полусферы радиуса.
- Для каждой сэмплированной точки проверяется, находится ли она перед поверхностью (то есть закрывает ли она точку от рассеянного света).
- Доля «закрывающих» сэмплов даёт коэффициент затенения, который умножается на итоговый цвет пикселя.
Радиус сэмплирования задаёт масштаб эффекта: маленький радиус даёт тонкие тени в углах, большой — грубое затемнение целых зон.
¶История и развитие
¶Исходный SSAO (Crytek, 2007)
Авторы метода — Джорджо Маркесано (Giorgio Marchese), Филипп Слусалски (Filip Strugar) и коллеги из Crytek. В Crysis (2007) эффект впервые появился в массовой игре и стал визитной карточкой движка CryEngine 2. Исходная реализация была вычислительно дорогой: на каждый пиксель приходилось множество сэмплов, что требовало мощного GPU.
¶HBAO (Horizon-Based Ambient Occlusion)
Предложен NVIDIA в 2008 году. Вместо сэмплирования по объёму оцениваются горизонты — максимальные углы, под которыми соседние пиксели видны из исследуемой точки. Метод даёт более чистое и стабильное затенение, чем исходный SSAO, при сопоставимой стоимости. HBAO и его развитие HBAO+ активно используются в играх под GPU NVIDIA.
¶GTAO (Ground Truth Ambient Occlusion)
Предложен Activision в 2016 году. Считается более математически строгой аппроксимацией «истинного» AO: аналитически интегрирует затенение по полусфере, используя данные карты глубины и нормалей. GTAO реализован в Unreal Engine 4.22+ и стал одним из стандартов AAA-рендеринга.
¶SSAO в консольном поколении
В седьмом поколении консолей (Xbox 360, PlayStation 3) SSAO активно применялся в таких играх, как Batman: Arkham Asylum (2009), Mass Effect 2 (2010), Crysis 2 (2011). Восьмое поколение (PS4, Xbox One) сделало AO обязательным компонентом графического конвейера.
¶Разновидности
| Метод | Год | Особенности |
|---|---|---|
| SSAO (Crytek) | 2007 | Первая массовая реализация, сэмплирование по объёму |
| HBAO / HBAO+ | 2008 / 2014 | Оценка горизонтов, меньше артефактов |
| SSAO 2.0 | 2009 | Улучшенная версия Crytek с меньшей стоимостью |
| Scalable AO | 2010 | Адаптивная детализация от AMD |
| GTAO | 2016 | Аналитическая аппроксимация ground truth |
| GTAO в UE4/UE5 | 2019+ | Стандартный AO движка Unreal Engine |
¶Проблемы и ограничения
SSAO наследует ограничения экранного пространства:
- Отсутствие данных за пределами экрана. Если объект выходит за кадр, его вклад в затенение теряется. Это приводит к «появлению» тени при движении камеры.
- Артефакты по краям. На контурах объектов, особенно на переднем плане, могут появляться светлые ореолы или тёмные полосы.
- Шум. При малом числе сэмплов изображение «кипит» — динамический шум, который приходится сглаживать фильтрами (блюром), что размывает детали.
- Зависимость от нормалей. Некорректные нормали (например, из сжатых текстур) приводят к ошибкам в оценке затенения.
Для борьбы с артефактами применяются temporal filtering (усреднение по кадрам), bilateral blur и реконструкция нормалей из глубины.
¶Альтернативы и дополнения
Помимо SSAO и его вариаций, в современном рендеринге используются:
- SSDO (Screen Space Directional Occlusion) — учитывает направление света, даёт более реалистичные полутени.
- Voxel-based AO — оценка затенения по воксельной репрезентации сцены, применяется в Minecraft Bedrock Edition и некоторых индийных движках.
- Ray-traced AO — точный расчёт через трассировку лучей, доступен в играх с поддержкой RTX (например, Cyberpunk 2077, Control). Не является экранным методом и не наследует его ограничений, но требует соответствующего оборудования.
¶Применение в настройках игр
В меню графики SSAO обычно представлено как «Ambient Occlusion» с вариантами «Off», «SSAO», «HBAO», «GTAO». Отключение AO заметно уплощает картинку: пропадают тени в углах, под объектами, в щелях. Влияние на производительность зависит от реализации, но обычно составляет 5–15% кадрового времени на средних и высоких настройках.
¶Источники
- Marchese G., Strugar F. и др. — материалы GDC 2007–2009 по SSAO
- Jimenez J. и др. — Horizon-Based Ambient Occlusion (NVIDIA, 2008)
- Jimenez J., Xiong Y. — Ground Truth Ambient Occlusion (Activision, SIGGRAPH 2016)
- Crytek — документация CryEngine 2
- Epic Games — документация Unreal Engine (раздел Ambient Occlusion)
