Введение

В компьютерной графике, фотонное отображение — это алгоритм рендеринга глобального освещения, разработанный Хенриком Ванном Дженсеном в период с 1995 по 2001 год, который приближённо решает уравнение рендеринга для интегрирования светового излучения в заданной точке пространства. Лучи, исходящие от источника света (подобные фотонам), и лучи от камеры отслеживаются независимо друг от друга до выполнения определённого критерия завершения, после чего они связываются на втором этапе для получения значения освещённости. Алгоритм используется для реалистичного моделирования взаимодействия света с различными типами объектов (аналогично другим фотореалистичным техникам рендеринга). В частности, он способен имитировать преломление света в прозрачных веществах, таких как стекло или вода (включая каустики), диффузное межотражение между освещёнными объектами, подповерхностное рассеяние света в полупрозрачных материалах и некоторые эффекты, вызываемые частицами, такие как дым или водяной пар. Фотноное отображение также может быть расширено для более точного моделирования света, например, спектрального рендеринга. Прогрессивное фотонное отображение (PPM) начинается с трассировки лучей, а затем добавляет всё больше и больше проходов фотонного отображения для получения постепенно более точного изображения. В отличие от трассировки пути, двунаправленной трассировки пути, объёмной трассировки пути и светового транспорта Метрополиса, фотонное отображение является "смещённым" алгоритмом рендеринга, что означает, что усреднение бесконечного числа рендеров одной и той же сцены с использованием этого метода не сходится к правильному решению уравнения рендеринга. Однако это непротиворечивый метод, и точность рендеринга можно повысить, увеличив количество фотонов. По мере приближения количества фотонов к бесконечности, изображение будет всё ближе и ближе к решению уравнения рендеринга.

Каустики

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

Диффузные взаимные отражения

Диффузное взаимное отражение проявляется, когда свет от одного диффузного объекта отражается на другой. Фотоновое отображение особенно хорошо справляется с этим эффектом, поскольку алгоритм отражает фотоны с одной поверхности на другую, основываясь на двунаправленной функции распределения отражения (BRDF) этой поверхности, и таким образом, попадание света от одного объекта на другой является естественным результатом данного метода. Диффузное взаимное отражение впервые было смоделировано с использованием решений на основе радиозности. Однако фотоновое отображение отличается тем, что разделяет перенос света и природу геометрии в сцене. Цветовое перетекание – пример диффузного взаимного отражения.

Подземное рассеивание

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

Создание фотоновой карты (первый проход)

При фотонном отображении световые пакеты, называемые фотонами, излучаются из источников света в сцену. Каждый раз, когда фотон пересекает поверхность, точка пересечения и направление его распространения сохраняются в кэше, называемом картой фотонов. Обычно для сцены создаются две карты фотонов: одна – специально для каустики, а другая – глобальная, для остального освещения. После пересечения поверхности материал определяет вероятность отражения, поглощения или пропускания/преломления. Для выбора одного из этих действий используется метод Монте-Карло, известный как «русская рулетка». Если фотон поглощается, новое направление не задается, и трассировка для этого фотона прекращается. Если фотон отражается, для определения соотношения отраженного излучения используется функция двунаправленного распределения отражения (BRDF) поверхности. Наконец, если фотон проходит сквозь поверхность, его направление определяется функцией, зависящей от характера пропускания. После построения карты фотонов (или в процессе ее построения) она обычно организуется таким образом, чтобы быть оптимальной для алгоритма поиска k ближайших соседей, поскольку время поиска фотонов зависит от их пространственного распределения. Йенсен рекомендует использовать kd-деревья. Затем карта фотонов сохраняется на диске или в памяти для последующего использования.

Рендаринг (второй проход)

На этом этапе алгоритма фотонная карта, созданная на первом проходе, используется для оценки освещенности каждого пикселя выходного изображения. Для каждого пикселя сцена трассируется лучами до тех пор, пока не будет найдена ближайшая точка пересечения с поверхностью. В этой точке уравнение рендеринга используется для вычисления освещенности поверхности, исходящей из точки пересечения в направлении пришедшего луча. Для повышения эффективности уравнение разбивается на четыре составляющие: прямое освещение, зеркальное отражение, каустики и мягкое непрямое освещение. Для точной оценки прямого освещения трассируется луч от точки пересечения к каждому источнику света. Пока луч не пересекает другой объект, источник света используется для расчета прямого освещения. Для приблизительной оценки непрямого освещения используется фотонная карта для вычисления вклада в освещенность. Зеркальное отражение в большинстве случаев можно вычислить с помощью процедур трассировки лучей (так как они хорошо справляются с отражениями). Вклад в освещенность поверхности от каустик рассчитывается непосредственно с использованием фотонной карты каустик. Количество фотонов на этой карте должно быть достаточно большим, поскольку карта является единственным источником информации о каустиках в сцене. Для мягкого непрямого освещения освещенность рассчитывается непосредственно с помощью фотонной карты. Однако эта составляющая не требует такой же точности, как вклад от каустик, и поэтому используется глобальная фотонная карта.

Расчет излучения с помощью фотоновой карты

Для расчета сияния поверхности в точке пересечения используется одна из кэшированных фотонных карт. Шаги следующие:

Соберите N ближайших фотонов, используя функцию поиска ближайших соседей на фотонной карте. Пусть S — сфера, содержащая эти N фотонов. Для каждого фотона разделите количество флюса (реальных фотонов), которое представляет этот фотон, на площадь S и умножьте на BRDF, примененную к этому фотону. Сумма этих результатов по всем фотонам представляет собой общее сияние поверхности, возвращаемое точкой пересечения поверхности в направлении луча, который в нее попал.

Оптимизация

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

Вариации

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