Трассировка пути — это метод Монте-Карло компьютерной графики для рендеринга изображений трехмерных сцен таким образом, чтобы глобальное освещение соответствовало реальности. По сути, алгоритм интегрирует всю освещенность , достигающую одной точки на поверхности объекта. Затем эта освещенность уменьшается с помощью функции отражения поверхности ( BRDF ), чтобы определить, какая ее часть пойдет в сторону камеры точки обзора. Эта процедура интегрирования повторяется для каждого пикселя выходного изображения. В сочетании с физически точными моделями поверхностей, точными моделями реальных источников света и оптически правильными камерами трассировка пути может создавать неподвижные изображения, которые неотличимы от фотографий.
Трассировка пути естественным образом имитирует множество эффектов, которые должны быть специально добавлены к другим методам (обычная трассировка лучей или рендеринг сканлайна ), например, мягкие тени , глубина резкости , размытие движения , каустика , окклюзия окружения и непрямое освещение. Реализация рендерера, включающего эти эффекты, соответственно проще. Расширенная версия алгоритма реализуется с помощью объемной трассировки пути , которая учитывает рассеивание света сценой.
Благодаря своей точности, беспристрастности и алгоритмической простоте трассировка пути используется для генерации эталонных изображений при тестировании качества других алгоритмов рендеринга. Однако алгоритм трассировки пути относительно неэффективен: для получения высококачественных изображений без шумовых артефактов необходимо трассировать очень большое количество лучей . Было введено несколько вариантов, которые более эффективны, чем исходный алгоритм для многих сцен, включая двунаправленную трассировку пути, объемную трассировку пути и транспортировку света в Metropolis .
Уравнение рендеринга и его использование в компьютерной графике были представлены Джеймсом Каджией в 1986 году. [1] Трассировка пути была введена тогда как алгоритм для поиска численного решения интеграла уравнения рендеринга. Десятилетие спустя Лафортюн предложил множество уточнений, включая двунаправленную трассировку пути. [2]
В 1997 году Эрик Вич и Леонидас Дж. Гибас представили метод городского легкого транспорта , вносящий изменения в ранее найденные пути с целью повышения производительности в сложных условиях.
Совсем недавно центральные и графические процессоры стали достаточно мощными, чтобы быстрее визуализировать изображения, что вызвало более широкий интерес к алгоритмам трассировки пути. Тим Перселл впервые представил алгоритм глобального освещения , работающий на графическом процессоре в 2002 году. [3] В феврале 2009 года Остин Робисон из Nvidia продемонстрировал первую коммерческую реализацию трассировщика пути, работающего на графическом процессоре [4] , а затем последовали и другие реализации, например, реализация Владимира Койлазова в августе 2009 года. [5] Этому способствовало развитие наборов инструментов программирования GPGPU, таких как CUDA и OpenCL, а также SDK для трассировки лучей на графическом процессоре, таких как OptiX .
Трассировка пути сыграла важную роль в киноиндустрии. Более ранние фильмы полагались на рендеринг сканлайна для создания визуальных эффектов и анимации CG. В 1998 году Blue Sky Studios рендерила удостоенный премии «Оскар» короткометражный фильм Bunny с помощью своего фирменного рендеринга трассировки пути CGI Studio, включающего мягкие тени и эффекты непрямого освещения. В 2006 году « Дом монстров » Sony Pictures Imageworks стал первым анимационным фильмом, который был полностью рендерен в трассировщике пути с использованием коммерческого рендерера Arnold . Кроме того, Walt Disney Animation Studios использует свой собственный оптимизированный трассировщик пути, известный как Hyperion, с момента производства « Города героев» в 2014 году. [6] Pixar Animation Studios также приняла трассировку пути для своего коммерческого рендерера RenderMan .
Уравнение рендеринга Каджии соответствует трем конкретным принципам оптики: принципу глобального освещения, принципу эквивалентности (отраженный свет эквивалентен излучаемому свету) и принципу направления (отраженный свет и рассеянный свет имеют направление).
В реальном мире объекты и поверхности видны благодаря тому, что они отражают свет. Этот отраженный свет затем освещает другие объекты в свою очередь. Из этого простого наблюдения вытекают два принципа.
I. Для данной внутренней сцены каждый объект в комнате должен способствовать освещению всех остальных объектов.
II. Во-вторых, не следует делать различия между освещением, испускаемым источником света, и освещением, отраженным от поверхности.
Изобретенный в 1984 году, довольно отличный метод, называемый излучательностью, был верен обоим принципам. Однако излучательность связывает общую освещенность, падающую на поверхность, с равномерной яркостью , которая покидает поверхность. Это заставило все поверхности быть ламбертовскими , или «идеально рассеянными». Хотя излучательность привлекла много внимания при своем появлении, идеально рассеянных поверхностей в реальном мире не существует. Осознание того, что рассеяние от поверхности зависит как от входящего, так и от исходящего направления, является ключевым принципом, лежащим в основе функции распределения двунаправленной отражательной способности (BRDF). Эта зависимость от направления была в центре внимания исследований, что привело к публикации важных идей на протяжении 1990-х годов, поскольку учет направления всегда требовал платы за резкое увеличение времени вычислений на настольных компьютерах. Далее следует принцип III.
III. Освещение, исходящее от поверхностей, должно рассеиваться в определенном направлении, которое является некоторой функцией входящего направления прибывающего освещения и отбираемого исходящего направления.
Уравнение Каджии является полным резюме этих трех принципов, и трассировка пути, которая приближает решение уравнения, остается верной им в своей реализации. Существуют и другие принципы оптики, которые не являются фокусом уравнения Каджии, и поэтому часто сложны или неправильно моделируются алгоритмом. Трассировка пути осложняется оптическими явлениями, не содержащимися в трех принципах. Например,
Следующий псевдокод представляет собой процедуру выполнения наивной трассировки пути. Функция TracePath вычисляет один образец пикселя, где рассматривается только Gathering Path.
Цвет TracePath ( Рей , глубина подсчета ) { если ( глубина >= MaxDepth ) { return Black ; // Отскочил достаточное количество раз. } луч.НайтиБлижайшийОбъект ( ) ; если ( ray . hitSomething == false ) { return Black ; // Ничто не было затронуто. } Материальный материал = луч . вещьHit -> материал ; Цветовое излучение = материал . эмиттанс ; // Выберите случайное направление отсюда и продолжайте движение. Рэй новыйРэй ; newRay.origin = ray.pointWhereObjWasHit ; // Это НЕ косинусно-взвешенное распределение! newRay.direction = RandomUnitVectorInHemisphereOf ( ray.normalWhereObjWasHit ) ; // Вероятность нового луча константа с плавающей точкой p = 1 / ( 2 * PI ); // Вычислить BRDF для этого луча (предполагая ламбертовское отражение) float cos_theta = DotProduct ( newRay.direction , ray.normalWhereObjWasHit ) ; Цвет BRDF = материал . отражательная способность / PI ; // Рекурсивно трассируем отраженные источники света. Входящий цвет = TracePath ( newRay , depth + 1 ); // Применим здесь уравнение рендеринга. обратный эмиттанс + ( BRDF * incoming * cos_theta / p ); }void Render ( Изображение finalImage , количество numSamples ) { foreach ( пиксель в finalImage ) { foreach ( i в numSamples ) { Луч r = камера.generateRay ( пиксель ) ; пиксель.цвет + = TracePath ( r , 0 ) ; } pixel . color /= numSamples ; // Средние образцы. }}
Затем все образцы усредняются для получения выходного цвета. Обратите внимание, что этот метод всегда выборки случайного луча в полушарии нормали хорошо работает только для идеально диффузных поверхностей. Для других материалов обычно приходится использовать выборку по важности, т. е. вероятностно выбирать новый луч в соответствии с распределением BRDF. Например, идеально зеркальный (отражающий) материал не будет работать с методом выше, поскольку вероятность того, что новый луч будет правильным отраженным лучом — который является единственным лучом, через который будет отражаться какое-либо излучение — равна нулю. В этих ситуациях необходимо разделить отражательную способность на функцию плотности вероятности схемы выборки, как в случае интеграции Монте-Карло (в наивном случае выше нет конкретной схемы выборки, поэтому PDF оказывается ).
Есть и другие соображения, которые следует учитывать для обеспечения сохранения энергии. В частности, в наивном случае отражательная способность диффузного BRDF не должна превышать , иначе объект будет отражать больше света, чем получает (это, однако, зависит от используемой схемы выборки и может быть трудно сделать правильно).
Выборку интеграла можно выполнить одним из следующих двух различных подходов:
В обоих случаях для уменьшения дисперсии можно использовать метод, называемый оценкой следующего события . Он работает путем прямой выборки важной особенности (камеры в случае трассировки света или источника света в случае трассировки обратного пути ) вместо ожидания, пока путь случайно не попадет на него. Этот метод обычно эффективен, но становится менее полезным, когда присутствуют зеркальные или почти зеркальные BRDF. Для трассировки обратного пути это создает высокую дисперсию для каустических путей, которые взаимодействуют с диффузной поверхностью, а затем отражаются от зеркальной поверхности перед попаданием в источник света. Оценка следующего события не может использоваться для выборки этих путей непосредственно с диффузной поверхности, поскольку зеркальное взаимодействие находится посередине. Аналогично, его нельзя использовать для выборки путей с зеркальной поверхности, поскольку существует только одно направление, в котором может отразиться свет. Трассировка света имеет похожую проблему, когда пути взаимодействуют с зеркальной поверхностью перед попаданием в камеру. Поскольку такая ситуация встречается гораздо чаще, а шумные (или полностью черные) стеклянные объекты визуально сильно мешают, обратная трассировка пути является единственным методом, который используется для однонаправленной трассировки пути на практике.
Двунаправленная трассировка пути обеспечивает алгоритм, который объединяет два подхода и может давать меньшую дисперсию, чем любой метод по отдельности. Для каждого образца трассируются два пути независимо: один с использованием источника света и один с камеры. Это создает набор возможных стратегий выборки, где каждая вершина одного пути может быть напрямую связана с каждой вершиной другого. Исходный алгоритм трассировки света и алгоритм обратной трассировки пути являются частными случаями этих стратегий. Для трассировки света это соединение вершин пути камеры напрямую с первой вершиной пути света. Для обратной трассировки пути это соединение вершин пути света с первой вершиной пути камеры. Кроме того, существует несколько совершенно новых стратегий выборки, где соединены промежуточные вершины. Взвешивание всех этих стратегий выборки с использованием выборки с множественной важностью создает новый сэмплер, который может сходиться быстрее, чем однонаправленная трассировка пути, хотя для каждого образца требуется больше работы. Это особенно хорошо работает для каустик или сцен, которые освещаются в основном через непрямое освещение.
Трассировщик пути непрерывно производит выборку пикселей изображения . Изображение начинает становиться узнаваемым уже после нескольких выборок на пиксель, возможно, 100. Однако для того, чтобы изображение «свелось» и снизило уровень шума до приемлемого, обычно требуется около 5000 выборок для большинства изображений и гораздо больше для патологических случаев. Шум является особенно серьезной проблемой для анимаций, придавая им обычно нежелательное качество «зернистости пленки» случайных пятен.
Центральным узким местом производительности в трассировке пути является сложный геометрический расчет отбрасывания луча. Выборка по важности — это метод, который мотивирован отбрасывать меньше лучей через сцену, при этом все еще правильно сходясь к исходящей яркости на точке поверхности. Это делается путем отбрасывания большего количества лучей в направлениях, в которых яркость была бы больше в любом случае. Если плотность лучей, отбрасываемых в определенных направлениях, соответствует силе вкладов в этих направлениях, результат идентичен, но на самом деле было отброшено гораздо меньше лучей. Выборка по важности используется для сопоставления плотности лучей с законом косинуса Ламберта , а также используется для сопоставления BRDF.
Транспорт света в Metropolis может привести к получению изображения с меньшим количеством шумов и меньшим количеством образцов. Этот алгоритм был создан для того, чтобы получить более быструю сходимость в сценах, в которых свет должен проходить через странные коридоры или небольшие отверстия, чтобы достичь той части сцены, которую просматривает камера. Он также показал себя многообещающим в правильной визуализации патологических ситуаций с каустикой. Вместо генерации случайных путей новые пути выборки создаются как небольшие мутации существующих. В этом смысле алгоритм «запоминает» успешные пути от источников света до камеры.
Отражательные свойства (количество, направление и цвет) поверхностей моделируются с помощью BRDF . Эквивалентом для проходящего света (света, проходящего через объект) являются BSDF . Трассировщик пути может в полной мере использовать преимущества сложных, тщательно смоделированных или измеренных функций распределения, которые контролируют внешний вид («материал», «текстура» или «затенение» в терминах компьютерной графики) объекта.