Я не понимаю объяснения из Википедии.
Для каждого пикселя на экране пиксельный шейдер выбирает значения глубины вокруг текущего пикселя и пытается вычислить величину окклюзии для каждой из точек выборки.
Как значения глубины окружающих пикселей могут рассказать вам об окклюзии? Окклюзия , как я понимаю, происходит, когда объект A стоит перед другим объектом B, поэтому вы не можете видеть объект B. Но зачем вам теперь смотреть на пиксели глубины окружающих пикселей? Я имею в виду, что вы можете видеть эти пиксели, поэтому нет окклюзии. Может быть, я неправильно понял окклюзию.
И что я также не понял, так это термин «ядро» в некоторых других уроках. Что такое ядро и почему вы используете его для ssao?
Может ли кто-нибудь дать подробное объяснение алгоритма в отношении моих вопросов?
Ответы:
Мотивация скрытой окклюзии (AO) в целом заключается в том, чтобы приблизить способ, которым расщелины и углы часто затеняются, потому что в них попадает менее непрямой свет. Пример из фотографии моего офиса - обратите внимание на затемнение по краям, где встречаются стены и потолок. Комната освещается только светом, проникающим через окно и подпрыгивающим.
Чтобы точно симулировать это явление, автономные рендеры используют такие методы, как трассировка пути и картирование фотонов. Для целей реального времени мы либо рассчитываем его в автономном режиме, либо приближаемся к нему.
Окклюзия окружающего пространства на экране (SSAO) основана на наблюдении, что вы можете обнаружить углы и щели, посмотрев на буфер глубины (и, возможно, также на векторы нормалей) визуализированного изображения, и, таким образом, вы можете рассчитать приблизительный AO как пост- проходят. Буфер глубины является грубым представлением геометрии в сцене, поэтому, выбирая значения буфера глубины в окрестности целевого пикселя, вы можете получить представление о форме окружающей геометрии и сделать предположение, насколько темнее AO. должно быть.
Эта диаграмма от Bavoil и Sainz (2008) показывает, как значения буфера глубины, интерпретируемые как своего рода поле высоты, представляют дискретизированную версию некоторой геометрии. При расчете SSAO для центрального пикселя вы будете смотреть на значения глубины окружающих пикселей и вставлять их в некоторую формулу, предназначенную для получения более темного значения, когда геометрия является более вогнутой (как на диаграмме), и более светлой значение, когда геометрия плоская или выпуклая.
Формула, в которую входят значения глубины, называется «ядром» по аналогии с ядрами фильтра, используемыми для размытия, обнаружения краев и тому подобного. Однако SSAO сложнее, чем просто линейная свертка значений глубины. Дьявол кроется в деталях. Распределение образцов и формула, обрабатывающая их для получения значения окклюзии, были предметом большого исследования в течение последнего десятилетия, пытаясь улучшить реализм и уменьшить количество артефактов, сохраняя при этом хорошую производительность.
источник
Как упоминают Алан и Трихоплакс в комментариях, эффект, который имитирует окружающая окклюзия, - это не окклюзия поверхности от камеры, а окклюзия поверхности от ее окружения.
Подумайте об этом следующим образом: скажем, у вас есть равномерное освещение, идущее со всех сторон, так что общий входящий свет в любой точке суммирует до значения 1. Если вы поместите плоскую плоскость в эту среду и посмотрите на одну из ее сторон, эта сторона получит 50% этого освещения, или 0,5, потому что другая половина заблокирована самим самолетом. Другими словами, любая точка на поверхности самолета может «видеть» только свет, исходящий от половины окружения, поэтому она освещена вдвое меньше. Если вы сложите эту плоскость к своей точке обзора (складка «долины»), то вы уменьшите входящее освещение к той стороне плоскости дальше, до некоторого значения ниже 0,5, потому что, опять же, каждая точка на плоскости «видит» немного меньше света, идущего из окрестностей.
Окклюзия окружающего пространства на экране работает более или менее путем поиска этих «складок» - областей, где глубина резко изменяется, как это определено путем сравнения глубин соседних пикселей, - и затемнения их для имитации уменьшенного освещения от окружения точек.
источник