Этот алгоритм вычисляет интеграл освещенности с помощью метода Монте-Карло в самом общем случае. Из глаза виртуального наблюдателя выпускается луч. Каждый раз, когда луч ударяется о поверхность, выпускается случайный теневой и случайный отраженный луч (рис. 1).
Рисунок 1. Алгоритм трассировки путей.
Причем, существует несколько способов выбора отраженных лучей. Самый простой способ – равномерное распределение отраженных лучей по сфере. Но этот способ крайне несовершенен, потому что он испускает равное количество лучей во все стороны, даже в те, где BRDF близка к нулю и неэффективно использует вычислительные ресурсы. Другой способ заключается в том, чтобы испускать больше лучей по тем направлениям, для которых BRDF имеет большие значения, а нулевые области вообще не учитывать (в англоязычной литературе этот метод известен как importance sampling).
Ключевой момент трассировки путей тот же, что и в распределенной трассировке лучей – выбор сэмплов. Отличие заключается в том, что усреднение результата производится на самом верхнем уровне и отсутствует рекурсия (что позволяет легко реализовать этот алгоритм на GPU).
Трассировка путей, вычисляющая интеграл освещенности в самом общем случае, даже при ‘умном’ сэмплировании BRDF, очень медленно сходится и дает характерный высокочастотный шум, что очень сильно заметно человеческим глазом. Трассировка путей имеет сходимость корень квадратный из числа просчитанных путей. То есть для того, чтобы уменьшить уровень шума в m раз, необходимо выпустить m*m лучей. Для среднестатистической сцены, даже при 1000 лучей на пиксел, шум может быть всё ещё заметен глазом.
Рисунок 2. Шум, получаюшийся в результате трассировки путей.
Огромное преимущество алгоритма по сравнению со стандартной распределенной трассировкой лучей заключается в том, что можно визуализировать промежуточный результат. Картинка рассчитывается постепенно и если она устраивает пользователя, алгоритм можно остановить. |