Окружающее затенение в экранном пространстве — Википедия
Окружающее затенение в экранном пространстве (англ. screen space ambient occlusion, SSAO) — программная техника в трёхмерной компьютерной графике, которая является приближенной имитацией глобального освещения и представляет собой изменённый и усовершенствованный вариант техники окружающего затенения. Алгоритм SSAO работает в режиме реального времени и имитирует рассеянное непрямое освещение и соответствующее затемнение в трёхмерном виртуальном пространстве.
SSAO был разработан отделом исследований и разработок немецкой компании Crytek при разработке графических компонентов игрового движка CryEngine 2.[1] Crysis, первая игра на CryEngine 2, разработанная Crytek и вышедшая осенью 2007 года, впервые использовала SSAO. Позже данный алгоритм и его модификации были использованы во многих игровых движках, включая Leadwerks Engine, Dagor Engine, Unreal Engine, Unity, X-Ray, Glacier 2 и других.
Описание работы
[править | править код]Алгоритм SSAO исполняется на графическом процессоре видеокарты и осуществляется как пиксельный шейдер, анализирующий буфер глубины (Z-буфер) сцены, который сохранён в текстуре.
При работе алгоритма окружающего затенения пиксельный шейдер производит выборку значения глубины для каждого пикселя на экране вокруг текущего пикселя и пытается вычислить количество преград от каждой из выбранных точек. В своей самой простой реализации коэффициент преграды зависит только от различия глубины выбранной точки и текущей точки. Без дополнительных продвинутых решений и алгоритмов такой метод решения «в лоб» потребовал бы приблизительно 200 чтений из текстуры для каждого пикселя для хорошего визуального качества. Это число не является приемлемым для рендеринга в режиме реального времени на современных графических процессорах.
Алгоритм SSAO призван упростить вычислительную сложность алгоритма окружающего затенения и сделать его подходящим для работы на графических процессорах в режиме реального времени. Вместе с тем качество результирующего изображения у SSAO является худшим, чем в первоначальном окружающем затенении, так как SSAO использует аппроксимирующие (приближающие) методики рендеринга.
Для создания окружающего затенения необходимо иметь две текстуры со сценой:
- Карта нормалей: положение нормали объектов сцены в каждой точке (пикселе), отображаемой на экране.
- Карта позиций: координаты объекта в каждой точке (пикселе), отображаемой на экране.
Потом берётся карта позиций и нормалей каждого текселя на экране и обрабатываются соседние тексели. По отношению позиций соседних текселей к обрабатываемому, ему присваивается определённый уровень «затенения».
Для получения высококачественных результатов с гораздо меньшим количеством чтений текстуры, по сравнению с окружающим затенением, в SSAO осуществление выборки используется вместе с случайно вращаемым ядром. Ориентация ядра повторяется каждые N пикселей экрана для того, чтобы иметь только высокочастотные искажения в финальном изображении. В конце это высокочастотное искажение удаляется NxN количеством прохода постпроцессора, размывающего изображение (англ. Blur). При этом принимается во внимание глубина неоднородностей, используя такие методы, как сравнение смежных нормалей и глубин. Такое решение позволяет сокращать количество выборок глубины на пиксель к приблизительно 16 или меньше, в то же время предоставляя высококачественный результат и позволяя использовать SSAO в приложениях реального времени, таких как компьютерные игры.
Преимущества и недостатки
[править | править код]По сравнению с другими алгоритмами модели окружающего затенения, у SSAO есть следующие преимущества:
- Независимость от сложности сцены.
- Нет необходимости в предварительной обработке данных (пре-процессинг).
- Нет времени загрузки.
- Не используется системная (оперативная) память.
- Возможность работы с динамическими сценами.
- Работает тем же самым непротиворечивым способом для каждого пикселя на экране, как и алгоритм окружающего затенения.
- SSAO выполняется полностью на графическом процессоре, не используя центральный процессор.
- Может быть легко интегрирован в любой современный графический конвейер.
Вместе с преимуществами алгоритму SSAO свойственны и недостатки:
- Алгоритм SSAO менее качественный, так как использует упрощающие методики для увеличения производительности.
- Алгоритм больше локальный, чем глобальный, во многих случаях зависящий от обзора, поскольку он зависит от смежных глубин текселей, которые могут быть сгенерированы любой геометрией.
- Алгоритму SSAO тяжело корректно сгладить/размыть искажения, не сталкиваясь с неоднородностью глубины, которая возникает, например, на гранях объектов.
Примечания
[править | править код]- ↑ Ambient Occlusion – approaches in screen space (SSAO) (англ.). CG – Blog (16 января 2010). Дата обращения: 22 мая 2011. Архивировано 29 марта 2012 года.
Ссылки
[править | править код]- Англоязычные источники
- Finding Next Gen — CryEngine 2
- Video showing SSAO in action
- Image Enhancement by Unsharp Masking the Depth Buffer
- Hardware Accelerated Ambient Occlusion Techniques on GPUs
- Overview on Screen Space Ambient Occlusion Techniques
- Real-Time Depth Buffer Based Ambient Occlusion
- Source code of SSAO shader used in Crysis
- Approximating Dynamic Global Illumination in Image Space
- Accumulative Screen Space Ambient Occlusion
- Русскоязычные источники
- Боресков Алексей Викторович. Screen-Space Ambient Occlusion . steps3D (2008). Дата обращения: 5 апреля 2009.
- Глухарев Алексей Сергеевич. Screen Space Ambient Occlusion . The Last World Project (29 декабря 2007). Дата обращения: 28 марта 2010.
Для улучшения этой статьи желательно:
|