Окружающее затенение в экранном пространстве () — программная техника в трёхмерной компьютерной графике, которая является приближенной имитацией глобального освещения и представляет собой изменённый и усовершенствованный вариант техники окружающего затенения. Алгоритм SSAO работает в режиме реального времени и имитирует рассеянное непрямое освещение и соответствующее затемнение в трёхмерном виртуальном пространстве.

SSAO был разработан отделом исследований и разработок немецкой компании Crytek при разработке графических компонентов игрового движка CryEngine 2. 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 количеством прохода постпроцессора, размывающего изображение (). При этом принимается во внимание глубина неоднородностей, используя такие методы, как сравнение смежных нормалей и глубин. Такое решение позволяет сокращать количество выборок глубины на пиксель к приблизительно 16 или меньше, в то же время предоставляя высококачественный результат и позволяя использовать SSAO в приложениях реального времени, таких как компьютерные игры.

Преимущества и недостатки По сравнению с другими алгоритмами модели окружающего затенения, у SSAO есть следующие преимущества: Независимость от сложности сцены. Нет необходимости в предварительной обработке данных (пре-процессинг). Нет времени загрузки. Не используется системная (оперативная) память. Возможность работы с динамическими сценами. Работает тем же самым непротиворечивым способом для каждого пикселя на экране, как и алгоритм окружающего затенения. SSAO выполняется полностью на графическом процессоре, не используя центральный процессор. Может быть легко интегрирован в любой современный графический конвейер.

Вместе с преимуществами алгоритму SSAO свойственны и недостатки: Алгоритм SSAO менее качественный, так как использует упрощающие методики для увеличения производительности. Алгоритм больше локальный, чем глобальный, во многих случаях зависящий от обзора, поскольку он зависит от смежных глубин текселей, которые могут быть сгенерированы любой геометрией. Алгоритму SSAO тяжело корректно сгладить/размыть искажения, не сталкиваясь с неоднородностью глубины, которая возникает, например, на гранях объектов.

Примечания

Ссылки Англоязычные источники 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

Русскоязычные источники

Категория:Освещение в трёхмерной графике