Трассировка пути vs трассировка лучей. Обосновано

Складывается впечатление, что каждые несколько лет появляется новая потрясающая технология, обещающая сделать игры более реалистичными. На протяжении десятилетий у нас появились шейдеры, тесселяция, отображение теней, трассировка лучей, а теперь – «новенький на районе»: трассировка пути.

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

Что такое трассировка пути?

Короткий и приятный ответ на этот вопрос: «Трассировка пути — это просто трассировка лучей». Уравнения для моделирования поведения света те же, использование структур данных для ускорения поиска взаимодействий луч-треугольник такое же, современные графические процессоры используют те же блоки для ускорения процесса. Это также очень трудоемко в вычислительном отношении.

Но подождите: если всё так одинаково, почему отличается название и какие преимущества трассировка пути предлагает разработчикам игр? Разница трассировки пути от трассировки лучей в том, что вместо того, чтобы следовать за множеством лучей на протяжении всей сцены, алгоритм отслеживает только наиболее вероятный путь света.

Без краткой технической справки по трассировке лучей не обойтись. Кадр начинается как обычно: видеокарта визуализирует всю геометрию (все треугольники, составляющие сцену) и сохраняет ее в памяти.

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

Не в буквальном смысле — генерируется векторное уравнение с параметрами, заданными на основе того, где находится камера и пиксель. Затем каждый луч сверяется с геометрией сцены - и это первая часть сложности трассировки лучей. К счастью, новейшие графические процессоры AMD и Nvidia оснащены специальными аппаратными блоками для ускорения этого процесса.

Если луч и объект взаимодействуют, выполняется еще один расчет, чтобы определить, какой именно треугольник в модели задействован, и цвет треугольника эффективно изменит цвет пикселя.

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

В свою очередь эти лучи отслеживаются до тех пор, пока они не коснутся объекта, и последовательность продолжается, пока цепочка лучей, наконец, не отразится обратно к источнику света в сцене. Общее количество лучей, проходящих по сцене от исходного основного луча, растет экспоненциально с каждым отскоком.

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

Но даже при использовании самых мощных графических и центральных процессоров создание кадра с полной трассировкой лучей занимает огромное количество времени – намного, намного больше, чем традиционный рендеринг с использованием вычислительных и пиксельных шейдеров.

Вот тут-то и вписывается в картину трассировка пути, если простите за каламбур.


Когда больше работы значит меньше работы

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

Традиционная трассировка лучей включает в себя расчет точного пути отражения или преломления каждого луча и его обратное отслеживание до одного или нескольких источников света. При трассировке пути для каждого пикселя генерируется несколько лучей, но они отражаются в случайном направлении. Это повторяется, когда луч попадает на объект, и продолжается до тех пор, пока не будет достигнут источник света или заданный предел отражения.

Само по себе это, вероятно, не кажется огромным изменением в объеме требуемых вычислений. Так в чём же фокус?

Не все лучи будут использоваться для создания окончательного цвета пикселя в кадре - будет выбрано только определенное количество из них. Алгоритм использует результаты почти идеального пути отражения света от камеры к источнику света. Затем можно масштабировать количество образцов для каждого пикселя, чтобы настроить точность конечного изображения.

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

Но вот что самое интересное: обычно меньшее количество лучей приводит к менее реалистичному освещению, но поскольку на большую часть цвета пикселей кадра влияют только первичные лучи, удаление большей части или всех вторичных лучей ни на что не влияет так сильно, как можно подумать.

Однако, если сцена содержит множество поверхностей, которые будут отражать и преломлять свет, таких как стекло или вода, тогда эти вторичные лучи становятся важными. Чтобы обойти эту проблему, алгоритм настраивается для учета распределения типов лучей, которые должны быть получены в сцене, либо эти конкретные поверхности обрабатываются в их собственном проходе рендеринга с полной трассировкой лучей.

Хороший разработчик будет использовать полный спектр инструментов рендеринга: растеризацию с помощью шейдеров, трассировку пути и полную трассировку лучей. Чтобы произвести все эти расчёты, требуется гораздо больше работы, но это значительно меньше работы для железа.

Почему о трассировке пути заговорили сейчас?

Несколько раз за последние пару лет выпускались статьи с заголовками о модах, добавляющих трассировку лучей к старой классике, но большинство из них на самом деле относятся к трассировке пути. Об этом было известно еще в 2019 году в экспериментальном моде для Crysis и Quake 2 или совсем недавно в неофициальном моде трассировки лучей для Half-Life, моде Classic Doom, Descent и многих других. И всё то – трассировка пути.

Был также твит от старшего графического инженера по исследованиям и разработкам AMD, который объявил о своем проекте по обновлению оригинальной игры Return to Castle Wolfenstein с помощью рендерера с трассировкой пути. См. ниже:

Пример 1.

После трассировки путей.

Пример 2.

После трассировки путей.

Пример 3.

После трассировки путей.

Как отмечалось выше, ремастер Quake II от Nvidia, оснащенный рендерером с трассировкой лучей, был выпущен для продвижения технологии RTX. Первоначально это была работа одного человека, Кристофа Шида, который создал ремастер (технически известный как Q2VKPT) в рамках исследовательского проекта. Благодаря вкладу других экспертов в области графических технологий родилась Quake II RTX, ставшая первой известной игрой, в которой использовалась трассировка пути для всего освещения.

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

Разногласия по поводу таких фраз, как стохастическая выборка множественной важности и алгоритмы уменьшения дисперсии, в проекте подчеркнули две вещи: во-первых, трассировка пути выглядит очень круто, а во-вторых, она по-прежнему серьезно сложна как для разработчиков, так и для аппаратного обеспечения. Если вы хотите понять, насколько сложна эта математика, прочитайте главу 47 книги "Драгоценные камни Трассировки Лучей II".

Но там, где Quake II RTX показывает, чего можно достичь с помощью трассировки путей, такие игры, как Control и Cyberpunk 2077, демонстрируют, что невероятная графика достижима за счет сочетания всех методов освещения и затенения — растеризация и шейдеры по-прежнему доминируют с трассировкой лучей для отражений и теней.

Так что нам еще далеко до того, как мы увидим, что все игры визуализируются с использованием только трассировки пути.

Следуя по пути к лучшему будущему

Несмотря на свою относительную новизну в мире рендеринга в реальном времени, трассировка пути определенно никуда не денется. Мы уже видели результаты в одной игре, а трассировка пути уже широко используется в автономных рендерах, таких как Blender, а также в киноиндустрии, например, в Autodesk Arnold и Pixar RenderMan.

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

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

Стоит также рассмотреть консоли. Xbox Series X и PlayStation 5 предлагают поддержку «традиционной» трассировки лучей, но, учитывая, что их графические процессоры устареют всего через несколько лет, разработчики будут стремиться использовать все возможные ярлыки, чтобы выжать последние остатки мощность этих машин, прежде чем перейти к следующему поколению консолей.

Итак, вот вам трассировка пути - родственник трассировки лучей. Выглядит почти так же хорошо, работает намного быстрее. Учитывая постоянное развитие графических технологий и производительности домашних ПК и консолей, совсем скоро мы увидим компьютерную графику из последних блокбастеров и в наших любимых играх.