Метод фотонных карт (англ. photon mapping) — один из самых универсальных и распространённых алгоритмов рендеринга, решающих задачу интегрирования уравнения рендеринга. Алгоритм состоит из трех частей: трассировка фотонов, построение фотонной карты и сбор освещённости[1].

Трассировка фотонов править

Фотоны в данном методе — это частицы, переносящие некоторую дискретную порцию световой энергии. На начальном этапе фотоны испускаются из источника света в соответствии с распределением световой энергии у данного источника. Например известно, что точечный или сферический источник света (например, Солнце) испускают свет изотропно во всех направлениях. Площадные источники света имеют косинусоидальное распределение, имеющее максимум по направлению, совпадающему с нормалью к плоскости источника и нуль по направлениям, лежащим в этой плоскости[1].

В процессе трассировки, фотоны ударяются о различные поверхности модели (сцены). В зависимости от свойств материала, с ними могут происходить разные события: фотон может отразиться рассеянно (то есть в случайном направлении), зеркально, преломиться через поверхность или поглотиться. Решение о том, какое из событий происходит с фотоном, принимается на основании свойств материала поверхности и статистического метода «Русской рулетки»[1]. Лишь при рассеянном отражении, запись о фотоне сохраняется в список.

Построение фотонной карты править

На основе списка фотонов, полученного после этапа трассировки фотонов, производится построение фотонной карты в виде некоторой структуры пространственного разбиения. Этот этап вспомогательный и служит для того, чтобы на следующем шаге в произвольной точке пространства можно было найти k ближайших фотонов. Если бы фотоны просто оставались в списке, то k ближайших каждый раз пришлось бы вычислять перебором, что часто нецелесообразно. Для хранения фотонов как правило используется специализированный вариант k-мерного дерева (kD-tree)[1].

Сбор освещённости править

После того, как фотонная карта построена, и мы имеем возможность выполнять быстрый поиск в ней, начинается этап сбора освещённости в тех точках сцены, которые вносят вклад в синтезируемое изображение. Вопрос в том, в каких точках собирать освещённость. Здесь возможны различные варианты. Самый реалистичный метод: использовать распределенную трассировку лучей из виртуальной камеры с тем отличием, что каждый раз при ударе луча о поверхность, необходимо выполнить сбор освещённости в этой точке: найти k ближайших фотонов, суммировать их энергию (в простом случае) и поделить полученную энергию на площадь поверхности сферы сбора (радиус которой равен расстоянию до самого дальнего фотона)[1]. Алгоритм, таким образом, динамически выбирает радиус сбора: там где фотонов много, радиус сбора маленький, где мало — большой. Таким образом уменьшается уровень шума для всего изображения.

Можно использовать постоянный радиус сбора и искать не k ближайших фотонов, а собирать освещение со всех фотонов, попавших в сферу заданного радиуса. Однако такой метод дает больший шум изображения. На практике фотонные карты применяют для вычисления каустик и глобального освещения, часто с использованием кэша излучения (Irradiance caching) и финального сбора (см. ниже).

Для вычисления уравнения рендеринга непосредственно метод фотонных карт обычно не применяют, так как это ресурсоёмко (обычно необходимо как минимум несколько миллионов фотонов для получения приемлемого результата), изображение получается шумное и наблюдается характерный артефакт — потемнение краев. Потемнение краев наблюдается из-за того, что на границах поверхности сбор освещённости происходит только с половины сферы, а результат делится на площадь поверхности всей сферы. Чтобы устранить шум и убрать темные края, необходимо применять метод финального сбора или алгоритм построения выпуклой оболочки, который еще в несколько раз замедляет скорость фотонных карт[2].

Финальный сбор править

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

Примечания править

  1. 1 2 3 4 5 Christensen, N. J.; Jensen, H. W. (2000), "A Practical Guide to Global illumination and Photon Maps", Siggraph 2000
  2. Kato, T.; Saito, J. (2002), ""Kilauea": parallel global illumination renderer", In Proceedings of the Fourth Eurographics Workshop on Parallel Graphics and Visualization (7) {{citation}}: Указан более чем один параметр |number= and |issue= (справка)

Ссылки править