Открыть сервисСервис

Трассировка лучей в компьютерной графике

Трассировка лучей (ray tracing, также «прослеживание лучей») — метод компьютерной графики, основанный на моделировании распространения света путём вычисления траекторий отдельных лучей света в виртуальной сцене. Метод позволяет получить фотореалистичные изображения с корректными тенями, отражениями, преломлениями и глобальным освещением. В отличие от растеризации, которая проецирует полигоны на экран и вычисляет освещение точками, трассировка лучей работает с геометрией сцены напрямую, отслеживая путь каждого луча от камеры или источника света.

Принцип работы

Базовая идея метода — обратная трассировка лучей. Луч выпускается из камеры через каждую точку экрана (пиксель) и исследуется, с какими объектами сцены он пересекается. Для найденной точки пересечения вычисляется освещение по законам физики: интенсивность света от источников, свойства материала поверхности, направление нормали. Результат определяет цвет пикселя.

Если поверхность отражающая, луч «отскакивает» от неё и продолжает путь, исследуя, что видно в отражении. Если поверхность прозрачная, луч преломляется по закону Снеллиуса. Так формируется дерево лучей, каждая ветвь которого соответствует отражению или преломлению. Для получения мягких теней и корректного глобального освещения используются методы случайного сэмплирования: по одной точке пересечения запускается множество лучей с небольшими отклонениями направления (stochastic sampling).

Ключевые типы лучей в реализациях метода:

  • Первичные лучи — выпускаются из камеры через пиксели экрана;
  • Тени (shadow rays) — направляются от точки пересечения к источникам света для определения, находится ли точка в тени;
  • Отражённые лучи — продолжают путь после отражения от поверхности;
  • Преломлённые лучи — продолжают путь после преломления в прозрачных средах;
  • Лучи глобального освещения — случайные лучи, используемые для оценки света, приходящего из всех направлений.

История

Основы метода заложены в 1968 году Артуром Аппелем (Arthur Appell), предложившим понятие «луч тени» для расчёта теней. В 1979 году Тёрнер Уиттед (Turner Whitted) опубликовал работу, описавшую рекурсивную трассировку лучей с отражениями и преломлениями — эту модель часто называют классической трассировкой лучей. В 1986 году Роберт Кук (Robert Cook), Торасон Портер (Torrance Porter) и Лоид Кэролл (Lloyd Carpenter) предложили метод распределённых трассировок (distributed ray tracing), позволивший получать мягкие тени, размытие движения и глубину резкости.

До 2010-х годов трассировка лучей применялась преимущественно в кинематографии и научной визуализации из-за высокой вычислительной сложности. Рендеринг одного кадра в фильмах мог занимать часы и даже сутки на кластере серверов. Прорыв произошёл с появлением специализированных аппаратных ускорителей.

Аппаратная поддержка

В 2018 году компания NVIDIA выпустила видеокарты серии GeForce RTX на архитектуре Turing, оснащённые специальными блоками RT Core, ускоряющими операцию поиска пересечения луча с геометрией сцены. AMD аналогично внедрила ускорение трассировки в архитектуру RDNA 2 (2020 год) и последующие. Консоли PlayStation 5 и Xbox Series X|S также поддерживают аппаратную трассировку лучей.

Для программирования используются API: DirectX Raytracing (DXR) от Microsoft (2018), Vulkan Ray Tracing, OptiX от NVIDIA. Эти интерфейсы предоставляют разработчикам доступ к аппаратным ускорителям.

Применение

Трассировка лучей применяется в кинематографии для создания визуальных эффектов (студии Pixar, Weta Digital, ILM), в архитектурной визуализации, при проектировании освещения, в научных симуляциях распространения света. В компьютерных играх метод используется для реалистичных отражений на влажных поверхностях, корректных теней, отражений в зеркалах и преломлений в стекле. Полная трассировка лучей в играх остаётся крайне требовательной к производительности, поэтому применяется гибридный подход: растеризация основной геометрии в сочетании с трассировкой для теней, отражений и глобального освещения.

Ограничения

Основной недостаток — высокая вычислительная стоимость. Точное изображение требует большого количества лучей на пиксель, что приводит к шуму при малом их числе. Для борьбы с шумом применяются алгоритмы денойзинга (нейросетевые фильтры) и временно́е сглаживание (accumulation across frames). Трассировка также чувствительна к качеству геометрии: тонкие объекты и сложные сцены требуют структур ускорения — BVH (Bounding Volume Hierarchy), KD-деревьев.

См. также

Источники: Turner Whitted, «An Improved Illumination Model for Shaded Display», Communications of the ACM, 1980; Arthur Appell, «A Method for Shading Computer-Generated Views», AFIPS Spring Joint Computer Conference, 1968; Robert Cook et al., «Distributed Ray Tracing», SIGGRAPH 1984; NVIDIA RTX Architecture Whitepaper, 2018.

Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru