Открыть сервисСервис

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 обходит проблему, отказываясь от знания о сцене за пределами буфера глубины. Алгоритм работает в экранном пространстве:

  1. Для каждого пикселя берётся позиция в мировых координатах, восстановленная из карты глубины (depth buffer).
  2. Вокруг точки в мировом пространстве сэмплируется набор точек (обычно от 8 до 64) в пределах сферы/полусферы радиуса.
  3. Для каждой сэмплированной точки проверяется, находится ли она перед поверхностью (то есть закрывает ли она точку от рассеянного света).
  4. Доля «закрывающих» сэмплов даёт коэффициент затенения, который умножается на итоговый цвет пикселя.

Радиус сэмплирования задаёт масштаб эффекта: маленький радиус даёт тонкие тени в углах, большой — грубое затемнение целых зон.

История и развитие

Исходный 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.02009Улучшенная версия Crytek с меньшей стоимостью
Scalable AO2010Адаптивная детализация от AMD
GTAO2016Аналитическая аппроксимация ground truth
GTAO в UE4/UE52019+Стандартный 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)
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru