Ambient occlusion в компьютерной графике¶
Ambient occlusion (сокр. AO, дословно «окклюзия окружающего освещения») — метод в компьютерной трёхмерной графике, моделирующий мягкое затенение поверхностей в зависимости от того, насколько они открыты окружающему пространству. Точки, расположенные в углублениях, щелях и местах соприкосновения объектов, получают меньше «ambient»-света (ненаправленного фонового освещения) и потому выглядят темнее. Результат — усиление восприятия объёма, глубины и взаимного расположения объектов без вычисления полного физически корректного освещения.
¶Принцип работы
Классическая формулировка AO для точки поверхности выглядит так: берётся нормаль к поверхности в этой точке, из неё испускается множество направлений в полусферу, и для каждого направления проверяется, пересекает ли луч какую-либо геометрию. Доля заблокированных направлений определяет коэффициент окклюзии: если все направления свободны, коэффициент равен 1 (поверхность полностью открыта), если все перекрыты — 0 (полное затенение).
Формально это интеграл видимости по полусфере:
AO(p) = (1/π) ∫ V(p, ω) (n·ω) dω,
где V(p, ω) — видимость в направлении ω, n — нормаль поверхности. На практике интеграл аппроксимируется конечным числом лучей или выборок, что делает вычисление стохастическим и подверженным шуму — отсюда необходимость в сглаживании и фильтрации.
¶Связь с ambient-освещением
В ранних моделях освещения (например, в фиксированном конвейере OpenGL) термин ambient обозначал постоянную составляющую, добавляемую ко всем поверхностям одинаково, независимо от геометрии. Такое освещение делало сцены плоскими: внутренние углы комнаты освещались так же, как и открытые поверхности. AO был предложен как способ модулировать эту составляющую геометрическими данными, возвращая сцене ощущение объёма.
¶Способы вычисления
¶Экранное пространство (SSAO)
Screen-Space Ambient Occlusion — наиболее распространённый в реальном времени метод, предложенный в 2007 году Джеремиом Эйзенманом (Crytek) для игры Crysis. Алгоритм работает только с данными, доступными на экране: буфером глубины и нормалей. Вокруг каждого пикселя выбираются соседние точки, проецируются в мировое пространство и проверяется, находится ли их глубина перед рассматриваемой точкой (то есть перекрывает ли она её). Метод не требует информации о геометрии, выходящей за пределы экрана, поэтому объекты за кадром не участвуют в затенении — это его главный недостаток.
Основные разновидности SSAO: HBAO (Horizon-Based AO, NVIDIA, 2008), GTAO (Ground-Truth AO, 2016), SAO и другие. HBAO использует вместо сферических лучей анализ «горизонтов» вдоль нескольких направлений в экранном пространстве; GTAO даёт аналитическое приближение к «истинному» AO с меньшим числом выборок.
¶Объёмное пространство
Voxel-based AO (VXAO) вычисляет окклюзию по воксельной репрезентации сцены, что позволяет учитывать объекты вне экрана. Требует дополнительных вычислительных ресурсов, применяется в некоторых игровых движках (например, VXAO в DirectX 11/12).
¶Предвычисленный (baked) AO
Для статических сцен AO можно вычислить заранее и сохранить в текстуру (чаще всего в UV-развёртку модели). Такой подход применяется в кинематографической графике и играх со статичным окружением. Baked AO не меняется при движении объектов, поэтому для динамических элементов его сочетают с методами реального времени.
¶Применение
- Игровая индустрия. SSAO и его вариации стали стандартом дефолтного конвейера с 2000-х годов. Практически все современные игровые движки (Unreal Engine, Unity, Source 2, Frostbite, id Tech) включают тот или иной вариант AO.
- Кинематограф и анимация. AO вычисляется как часть финального рендера или рендер-пасса, который композится с остальными слоями изображения.
- Архитектурная визуализация и CAD. AO используется в вьюерах для повышения читаемости сложных моделей.
- Растровые редакторы. Эффект, имитирующий AO (иногда называемый «ambient shading»), применяется в 2D-программах для создания иллюзии объёма у иконок и интерфейсных элементов.
¶Ограничения
AO моделирует только затенение фонового света и не является заменой полноценному глобальному освещению: он не учитывает цветовой перенос (bleeding), отражённый свет и полутени от точечных источников. Метод даёт лишь приближение, и его результаты могут расходиться с физически корректным рендером. В экранном пространстве дополнительно возникают артефакты на границах геометрии и при нехватке данных о сцене.
¶История
Идея окклюзии как меры видимости полусферы восходит к работам по глобальному освещению 1980-х годов. Термин «ambient occlusion» в контексте рендеринга закрепился в 2002 году после публикации статьи «Ambient Occlusion and Lighting in Toy Story» (Pixar) и работ Сэма Бадникаа (Sam Binkley) и др. Широкое распространение в играх метод получил после появления SSAO в Crysis (2007).
¶Источники
- Eisenman J. Screen Space Ambient Occlusion. — NVIDIA / Crytek, 2007.
- McGuire M. et al. A Reconstruction Filter for Plausible Screen-Space Shadows. — Journal of Graphics Tools, 2012.
- Jimenez J. et al. Practical Realtime Strategies for Accurate Indirect Occlusion. — SIGGRAPH, 2016 (GTAO).
- Bavoil L., Sainz M. Multi-layer Dual-Robust Screen Space Ambient Occlusion. — Advances in Real-Time Rendering, SIGGRAPH, 2009.
