В компьютерной графике фотонное картирование — это двухпроходный алгоритм рендеринга глобального освещения , разработанный Хенриком Ванном Йенсеном в период с 1995 по 2001 год [1] , который приблизительно решает уравнение рендеринга для интегрирования светового излучения в заданной точке пространства. Лучи от источника света (например, фотоны ) и лучи от камеры трассируются независимо, пока не будет выполнен некоторый критерий завершения, затем они соединяются на втором этапе для получения значения светового излучения. Алгоритм используется для реалистичного моделирования взаимодействия света с различными типами объектов (аналогично другим фотореалистичным методам рендеринга ). В частности, он способен моделировать преломление света через прозрачное вещество, такое как стекло или вода (включая каустики ), диффузное взаимное отражение между освещенными объектами, подповерхностное рассеяние света в полупрозрачных материалах и некоторые эффекты, вызванные твердыми частицами, такими как дым или водяной пар . Фотонное картирование также может быть расширено для более точного моделирования света, такого как спектральный рендеринг . Прогрессивное фотонное картирование (PPM) начинается с трассировки лучей, а затем добавляет все больше и больше проходов фотонного картирования для обеспечения все более точного рендеринга.
В отличие от трассировки пути , двунаправленной трассировки пути , объемной трассировки пути и переноса света Metropolis , фотонное отображение является «предвзятым» алгоритмом рендеринга , что означает, что усреднение бесконечного числа рендеров одной и той же сцены с использованием этого метода не сходится к правильному решению уравнения рендеринга . Тем не менее, это последовательный метод, и точность рендеринга может быть увеличена за счет увеличения количества фотонов. По мере того, как количество фотонов приближается к бесконечности, рендер будет становиться все ближе и ближе к решению уравнения рендеринга.
Преломленный или отраженный свет вызывает узоры, называемые каустиками , обычно видимые как концентрированные пятна света на близлежащих поверхностях. Например, когда световые лучи проходят через бокал для вина, стоящий на столе, они преломляются, и на столе видны узоры света. Фотонное картирование может отслеживать пути отдельных фотонов, чтобы смоделировать, где появятся эти концентрированные пятна света.
Диффузное взаимоотражение очевидно, когда свет от одного диффузного объекта отражается на другой. Фотонное картирование особенно искусно справляется с этим эффектом, поскольку алгоритм отражает фотоны от одной поверхности к другой на основе двунаправленной функции распределения отражательной способности этой поверхности (BRDF), и, таким образом, свет от одного объекта, падающий на другой, является естественным результатом метода. Диффузное взаимоотражение было впервые смоделировано с использованием решений излучательности . Фотонное картирование отличается тем, что оно отделяет перенос света от природы геометрии в сцене. Цветовое растекание является примером диффузного взаимоотражения.
Подповерхностное рассеяние — это эффект, очевидный, когда свет проникает в материал и рассеивается, прежде чем поглотиться или отразиться в другом направлении. Подповерхностное рассеяние можно точно смоделировать с помощью фотонного картирования. Это был оригинальный способ, которым его реализовал Дженсен; однако метод становится медленным для сильно рассеивающих материалов, и двунаправленные функции распределения отражательной способности поверхностного рассеяния (BSSRDF) более эффективны в этих ситуациях.
При картировании фотонов световые пакеты, называемые фотонами, отправляются в сцену из источников света. Всякий раз, когда фотон пересекается с поверхностью, точка пересечения и входящее направление сохраняются в кэше, называемом картой фотонов . Обычно для сцены создаются две карты фотонов: одна специально для каустик и глобальная для другого света. После пересечения поверхности материалом задается вероятность либо отражения, либо поглощения, либо передачи/преломления. Для выбора одного из этих действий используется метод Монте-Карло, называемый русской рулеткой . Если фотон поглощается, новое направление не задается, и трассировка для этого фотона заканчивается. Если фотон отражается, для определения отношения отраженной яркости используется функция распределения двунаправленной отражательной способности поверхности . Наконец, если фотон передает, задается функция его направления в зависимости от характера передачи.
После построения карты фотонов (или во время построения) она обычно располагается оптимальным образом для алгоритма k-ближайших соседей , поскольку время поиска фотонов зависит от пространственного распределения фотонов. Дженсен выступает за использование kd-деревьев . Затем карта фотонов сохраняется на диске или в памяти для последующего использования.
На этом этапе алгоритма фотонная карта, созданная в первом проходе, используется для оценки яркости каждого пикселя выходного изображения. Для каждого пикселя сцена трассируется лучом до тех пор, пока не будет найдена ближайшая поверхность пересечения.
На этом этапе уравнение рендеринга используется для расчета поверхностной яркости, выходящей из точки пересечения в направлении луча, который на нее попал. Для повышения эффективности уравнение разлагается на четыре отдельных фактора: прямое освещение, зеркальное отражение, каустика и мягкое непрямое освещение.
Для точной оценки прямого освещения луч прослеживается от точки пересечения до каждого источника света. Пока луч не пересекает другой объект, источник света используется для расчета прямого освещения. Для приблизительной оценки непрямого освещения фотонная карта используется для расчета вклада яркости.
Зеркальное отражение в большинстве случаев можно рассчитать с помощью процедур трассировки лучей (поскольку они хорошо справляются с отражениями).
Вклад каустики в поверхностное сияние рассчитывается напрямую с использованием карты фотонов каустики. Количество фотонов в этой карте должно быть достаточно большим, поскольку карта является единственным источником информации о каустике в сцене.
Для мягкого непрямого освещения яркость рассчитывается напрямую с использованием карты фотонов. Однако этот вклад не должен быть таким же точным, как вклад каустики, и поэтому использует глобальную карту фотонов.
Для расчета поверхностной яркости в точке пересечения используется одна из кэшированных фотонных карт. Шаги следующие: