Страница 4: Как работает трассировка лучей?

По названию "трассировка лучей" сразу же можно понять принцип работы технологии. Лучи исходят от источника света, после чего попадают в глаз зрителя. Но на самом деле все ровно наоборот, в компьютерной графике используется обратный порядок трассировки лучей (Backward Ray Tracing).

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

Кроме проверки видимости объектов, трассировка лучей позволяет добавить на сцену и другую информацию. В частности, освещение. Для этого используются свойства материала всех примитивов. Матовая поверхность или глянцевая? Какой угол отражения, степень прозрачности или рассевания света? Также используются и другие параметры, которые описывают поведение поверхности. Легко посчитать, что число лучей экспоненциально увеличивается по мере усложнения сцены. Видеокарты GeForce RTX 20 по-прежнему не могут рассчитывать трассировку лучей в реальном времени для полного кадра в разрешении UHD, если требуется учитывать несколько сотен или даже тысяч примитивов со своими свойствами отражения и рассеяния. Так что NVIDIA пришлось пойти на ряд хитростей для снижения вычислительной нагрузки. Среди них - модели локального освещения или описания источников света, упрощающие расчет.

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

Тень создается в том случае, если между точкой поверхности и источником света имеется препятствие. Конечно, в реальности одним источником света дело не ограничивается. Отражения и рассеивания света приводят к появлению мягких и жестких теней, а также других эффектов, в зависимости от расстояния. В случае классического рендеринга могут использоваться заранее подготовленные карты теней (предварительно рассчитанные, что весьма сложно для крупных сцен и масштабных 3D-миров), либо определенные технологии, такие как Enhanced Horizon Based Ambient Occlusion (HBAO), Hybrid Frustum Traced Shadows (HFTS) и т.д. Но все они являются лишь приближением к реалистичному расчету теней.

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

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

Вторичные лучи тоже могут отражаться/преломляться, так что трассировка лучей используется рекурсивно для создания множественных отражений и преломлений. NVIDIA показала данную функцию в некоторых демонстрациях. Рекурсивная трассировка лучей была разработана еще в 1980-х годах, но только теперь она получила техническую реализацию NVIDIA. Причем рекурсивная трассировка лучей позволяет вывести не только множественные отражения и преломления света, но и тени. Игровые движки часто рассматривают источники света как точки. Но в реальности источники света имеют определенный размер, что приводит к размытию теней. Для расчета мягких теней вместо одного луча просчитываются несколько, после чего принимается среднее значение. Такой подход позволяет создавать основную тень и полутень. Недостатком можно назвать появление шума, если используется слишком мало лучей. Но NVIDIA придумала свое решение, на котором мы остановимся чуть ниже.

Последний момент - трассировка пути Path Tracing, расчеты лучей выполняются не только из глаза зрителя, но и от источников света. Сочетание разных способов позволяет максимально реалистично вывести сцену. Но трассировка пути требует значительных вычислительных ресурсов, сочетание разных технологий трассировки еще больше увеличивает нагрузку, так что возникают вопросы насчет того, как именно NVIDIA поддержала трассировку лучей и пути на видеокартах GeForce RTX 20.

NVIDIA RTX, OptiX и Microsoft DXR позволяют реализовать следующие технологии:

  • Отражения и преломления
  • Тени и Ambient Occlusion
  • Global Illumination
  • Instant и Off-Line Lightmap Baking
  • Primary Rays для Foveated VR-Rendering
  • Occlusion Culling
  • Расчеты физики, определение коллизий, симуляция частиц
  • Симуляция аудио (NVIDIA VRWorks Audio)
  • In-Engine Path Tracing (не в реальном времени)