Приключение в пространстве и времени
- 1 year ago
- 0
- 0
Окружающее затенение в экранном пространстве ( англ. screen space ambient occlusion, SSAO ) — программная техника в трёхмерной компьютерной графике , которая является приближенной имитацией глобального освещения и представляет собой изменённый и усовершенствованный вариант техники окружающего затенения . Алгоритм SSAO работает в режиме реального времени и имитирует рассеянное непрямое освещение и соответствующее затемнение в трёхмерном виртуальном пространстве.
SSAO был разработан отделом исследований и разработок немецкой компании Crytek при разработке графических компонентов игрового движка CryEngine 2 . Crysis , первая игра на CryEngine 2, разработанная Crytek и вышедшая осенью 2007 года, впервые использовала SSAO. Позже данный алгоритм и его модификации были использованы во многих игровых движках, включая , Dagor Engine , Unreal Engine , Unity , X-Ray , и других.
Алгоритм SSAO исполняется на графическом процессоре видеокарты и осуществляется как пиксельный шейдер , анализирующий буфер глубины ( Z-буфер ) сцены, который сохранён в текстуре .
При работе алгоритма окружающего затенения пиксельный шейдер производит выборку значения глубины для каждого пикселя на экране вокруг текущего пикселя и пытается вычислить количество преград от каждой из выбранных точек. В своей самой простой реализации коэффициент преграды зависит только от различия глубины выбранной точки и текущей точки. Без дополнительных продвинутых решений и алгоритмов такой метод решения «в лоб» потребовал бы приблизительно 200 чтений из текстуры для каждого пикселя для хорошего визуального качества. Это число не является приемлемым для рендеринга в режиме реального времени на современных графических процессорах.
Алгоритм SSAO призван упростить вычислительную сложность алгоритма окружающего затенения и сделать его подходящим для работы на графических процессорах в режиме реального времени. Вместе с тем качество результирующего изображения у SSAO является худшим, чем в первоначальном окружающем затенении, так как SSAO использует аппроксимирующие (приближающие) методики рендеринга.
Для создания окружающего затенения необходимо иметь две текстуры со сценой:
Потом берётся карта позиций и нормалей каждого текселя на экране и обрабатываются соседние тексели. По отношению позиций соседних текселей к обрабатываемому, ему присваивается определённый уровень «затенения».
Для получения высококачественных результатов с гораздо меньшим количеством чтений текстуры, по сравнению с окружающим затенением, в SSAO осуществление выборки используется вместе с случайно вращаемым ядром. Ориентация ядра повторяется каждые N пикселей экрана для того, чтобы иметь только высокочастотные искажения в финальном изображении. В конце это высокочастотное искажение удаляется NxN количеством прохода постпроцессора, размывающего изображение ( англ. Blur ). При этом принимается во внимание глубина неоднородностей, используя такие методы, как сравнение смежных нормалей и глубин. Такое решение позволяет сокращать количество выборок глубины на пиксель к приблизительно 16 или меньше, в то же время предоставляя высококачественный результат и позволяя использовать SSAO в приложениях реального времени, таких как компьютерные игры.
По сравнению с другими алгоритмами модели окружающего затенения, у SSAO есть следующие преимущества:
Вместе с преимуществами алгоритму SSAO свойственны и недостатки: