Трассировка лучей и трассировка путей — что это такое и в чем различия

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

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

Трассировка Лучей

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

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

Технология трассировки лучей для визуализации впервые была представлена Тернером Уиттедом в работе 1979 года под названием "Улучшенная модель освещения для затененного отображения". В своей публикации исследователь отмечает, что его идея применения трассировки в графике основана на работах таких людей, как Роберт Голдстин, который использовал трассировку лучей для расчета радиационного воздействия в танках. Также он упоминает Артура Эппла, который в 1968 году описал технику прослеживания лучей между поверхностью и источником света для создания освещения с тенями — эту работу нередко упоминают, как первое применение трассировки лучей в рендеринге.

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

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

Проблема такого подхода в экспоненциальной природе трассировки. Можно запустить один луч и он вычислит путь к основному источнику света. Обычно это самый важный и самый значимый источник освещения в сцене. Однако для вторичных отражений необходимо запускать все больше и больше лучей. Начав с 1 луча, он становится еще 10 лучами, каждый из которых выделяет еще 10 лучей, получая уже сотню. Еще по 10 лучей и уже 1000, еще 10 и вот 10 тысяч — процесс может продолжаться бесконечно. Сложность в том, что уже на третьем "отскоке" луча от объектов необходимо использовать в 1000 раз больше производительность, даже если этот "проход" влияет на 1/100 от качества финального освещения. Другими словами, весь процесс трассировки лучей по своей сути крайне неэффективен, даже если он эффективен в сравнении с иными методами физического рендеринга. Несмотря на оптимизацию метода в работе Кука, экспоненциальная характеристика трассировки оставалась фундаментальной преградой для применения технологии.

Трассировка Путей

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

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

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

Что в итоге

Сейчас "трассировку путей" часто применяют ошибочно, ассоциируя с распределенной трассировкой лучей, чтобы отделить их использование в интегрированном глобальном освещении от таких решений как Radiosity и Photon Mapping, даже если технически это не трассировка путей. 

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

Больше статей на Shazoo
Тэги: