Ambient occlusion (SSAO ) - это метод компьютерной графики для эффективного приближения эффекта ambient occlusion в реальном времени. Он был разработан Владимиром Каялиным во время работы в Crytek и впервые был использован в 2007 году в видеоигре Crysis, также разработанной Crytek.
Алгоритм реализован как пиксельный шейдер, анализирующий сцену буфер глубины, который хранится в текстуре. Для каждого пикселя на экране пиксельный шейдер делает выборку значений глубины вокруг текущего пикселя и пытается вычислить степень окклюзии для каждой из выбранных точек. В своей простейшей реализации коэффициент окклюзии зависит только от разницы глубины между выбранной точкой и текущей точкой.
Без дополнительных интеллектуальных решений такой метод грубой силы потребовал бы около 200 считываний текстуры на пиксель для хорошего визуального качества. Это неприемлемо для рендеринга в реальном времени на текущем графическом оборудовании. Чтобы получить результаты высокого качества с гораздо меньшим количеством чтений, выборка выполняется с использованием случайно повернутого ядра . Ориентация ядра повторяется через каждые N пикселей экрана, чтобы в конечном изображении оставался только высокочастотный шум. В конце концов, этот высокочастотный шум значительно удаляется с помощью этапа размытия NxN после обработки с учетом неоднородностей глубины (с использованием таких методов, как сравнение смежных нормалей и глубин). Такое решение позволяет уменьшить количество выборок глубины на пиксель примерно до 16 или меньше при сохранении высокого качества результата и позволяет использовать SSAO в программных приложениях реального времени, таких как компьютерные игры.
По сравнению с другими решениями ambient occlusion, SSAO имеет следующие преимущества:
SSAO также имеет следующие недостатки: