Ambient occlusion в photoshop

Темными осенними вечерами и с несколькими чашками горячего кофе в моем распоряжении, я решил изучить этот алгоритм, и эта статья является следствием. Прежде чем начать, я хотел бы отметить свое удивление тем, что этот алгоритм незаслуженно непопулярен среди разработчиков игр, в отличие от известного всем нам SSAO. Содержание этой статьи будет состоять в основном из теории.

При разработке этого алгоритма целью М. Макгуайра было добиться лучшей производительности и качества освещения. Немного об Ambient Occlusion AO Ambient Occlusion - это прокси для алгоритма GI Global Illumination, предназначенного для затенения пространств, которые эффективно заслонены другими объектами, что делает невозможным попадание света в данное пространство.

Сам алгоритм работает путем вычисления лучей, исходящих из точки, затенение которой мы тестируем, а затем луч пересекает объект. Если луч проходит без препятствий, то эта точка освещена, в противном случае она затенена.

Самый алгоритм работает путем вычисления лучей, исходящих из точки, затененность которой мы проверяем.

Но при расчете по этому алгоритму возникают некоторые трудности. Сам алгоритм работает по принципу: задается некоторая сфера, и в диапазоне этой сферы мы случайным образом выбираем точки, а затем сверяем глубины точек, ранее записанных в буфер глубины, с той, для которой мы рассчитываем затенение.

Если глубина последней больше, чем глубина случайной точки, то она затенена, иначе - освещена. Выполняется несколько таких проверок, после чего их результаты суммируются и вычисляется коэффициент затенения. Выглядит это примерно так: Благодаря своей простоте и относительно небольшой нагрузке, этот алгоритм стал любимым у многих разработчиков игр. Однако у него есть и множество недостатков.

Основная проблема этого алгоритма заключается в том, что при проверке глубины выбранная точка может находиться на краю объекта, который перекрывает проверяемую точку. Это приводит к тому, что точка считается засвеченной. Далее я хотел бы затронуть еще одну важную тему перед описанием метода AOV.

Радиозность Многие из вас, кто знаком с этим методом, нахмурятся, услышав его в контексте Ambient Occlusion. Правда в том, что эти методы тесно связаны друг с другом. Если вы уверены в своих знаниях, можете пропустить этот раздел и перейти к следующему.

В то же время, я хотел бы кратко остановиться на этой теме. Метод radiosity, также известный как метод излучательной способности, является одним из методов GI, основанных на вычислении форм-факторов, которые, в свою очередь, описывают обмен энергией между парами плоскостей в окружающей среде. Короче говоря, форм-факторы представляют собой определенное количество энергии, которая излучается одной плоскостью и принимается другой.

Кроче говоря, форм-факторы представляют собой определенное количество энергии, которая излучается одной плоскостью и принимается другой плоскостью.

При расчете форм-фактора учитывается расстояние между центрами плоскостей и угол поворота относительно друг друга. В этом уравнении HID равен единице, если dA1,2 видны друг другу, и нулю, если наоборот. Full Matrix Radiosity Суть этого подхода заключается в том, что окружение дискретизируется на маленькие плоскости. <Для каждой пары плоскостей вычисляются коэффициенты формы. Затем коэффициенты формы используются для создания системы уравнений, которая устанавливает взаимосвязь между плоскостями в окружении. Решив эту систему, мы получаем интенсивность света, который излучает плоскость. После расчета интенсивности окружение можно представить в любом положении без дополнительных расчетов освещения. Мы рассчитываем интенсивность света, который излучает самолет, следующим образом: где pi - коэффициент отражения плоскости i; Fij - коэффициент формы от плоскости i к плоскости j; Ii - лучезарность плоскости i; Iei - интенсивность излучения плоскости i; N - количество плоскостей, находящихся в окружении.

Этот подход был неплох, но он не позволял получить детальное и точное изображение. Кроме того, он становился очень дорогим, когда в сцене было много плоскостей. Позже метод был усовершенствован путем разбиения плоскостей на фрагменты, а каждый фрагмент, в свою очередь, был разбит на элементы.

Таким образом, мы получили более детальное изображение. Коэффициент формы от патча к патчу рассчитывается следующим образом: где Ei - количество элементов в патче, Fej - коэффициент формы от элемента e к патчу j, а Ai,e - площади патча и элемента.

Progressive Refinement Radiosity Этот подход основан на предыдущем. Особенностью этого подхода является то, что после каждой итерации происходит пересчет, а именно, увеличение значения радиусности плоскости.

Вычисляется следующим образом: где Ii - уже вычисленное значение излучательной способности. Проблема этих подходов заключается в сложности вычислений даже для простых форм объектов.

Чтобы вычислить форм-фактор плоскости, нам нужно выполнить два интегрирования, не говоря уже о лишних вычислениях. Решением этой проблемы стал Hemi-Cube Radiosity. Его суть заключается в том, что вокруг точки плоскости помещается так называемая проекционная полусфера с единичным радиусом.

Другая плоскость проецируется на эту полусферу и размещается в основании полусферы. Таким образом, форм-фактор будет равен отношению площади проецируемой плоскости в основании полусферы к площади основания самой полусферы.

Алгоритм HC в своей реализации использует, как можно догадаться, полукуб. Стороны полукуба разбиваются на множество маленьких дискретизированных пикселей полукуба, каждый из которых имеет свой предварительно вычисленный форм-фактор. Когда на полукуб проецируется вторая плоскость, сумма форм-факторов дискретных областей, на которые проецировалась плоскость, будет равна значению форм-фактора от точки на первой плоскости до второй плоскости.

К сожалению, это решение имело ряд недостатков, что и послужило причиной новых исследований в этом направлении. Если мы начнем описывать недостатки этого метода, у нас получится длинная статья, а мы не хотим этого делать. Макгуайр был вдохновлен этим подходом и использовал его для создания алгоритма AO.

Он описал его следующим образом: Пусть X - это очень маленький участок гладкого многообразия. Центроид X будет находиться в точке, которая является началом нормали n. Таким образом, препятствие лучам света, создаваемое многоугольником P, будет равно форм-фактору излучательной способности между P и X.

Точка между P и X будет одной и той же.

Для работы с этим алгоритмом нам по-прежнему понадобится буфер глубины и нормалей. Следующие операции будут выполняться в геометрическом шейдере. Во-первых, нам нужно вычислить функцию затухания, которая понадобится нам для сглаживания переходов от освещения ближнего поля к освещению дальнего поля. Для этого нам нужно вычислить вектор смещения, который понадобится нам для смещения вершин нашего объема относительно вершин полигона.

Еще один новый термин, который мы хотим ввести, называется "демпфирование". Оно отвечает за ослабление эффекта перекрытия при изменении расстояния. Чтобы было понятно: И наш последний шаг - это получение функции ослабления g по полигону перекрытия P AOp n. Также, после всех операций, мы должны применить t. После всего написанного здесь, было бы грешно не приложить скриншоты, демонстрирующие, как работает алгоритм AOV. Многие могут остаться недовольны, ведь они, скорее всего, хотели увидеть реализацию в виде кода.

К сожалению, слишком много информации вышло бы для одной статьи. Однако для тех, кто хочет реализовать этот метод, вы можете углубиться в демонстрацию от NVIDIA, которую я прикрепил ниже. У меня к вам, дорогие читатели, убедительная просьба. Если вам покажется, что описанный мной метод в каких-то местах неверен или просто есть ошибки в формулировках, дайте мне знать, и я постараюсь исправить все свои недочеты. Если вам нужно увидеть этот алгоритм в коде, я постараюсь найти время и сделать демонстрацию.

Навигация

thoughts on “Ambient occlusion в photoshop ”

  1. Дискутировать можно бесконечно, поэтому просто поблагодарю автора. Спасибо!

    Ответить
  2. По моему мнению Вы не правы. Я уверен. Могу это доказать. Пишите мне в PM, поговорим.

    Ответить

Leave a Comment