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

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.
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru