Страница 6: Трассировка лучей

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

С архитектурой Ampere и ядрами RT второго поколения NVIDIA увеличила производительность трассировки лучей. Более важно то, что эффекты трассировки лучей сегодня поддерживаются не только на ПК, но и на двух современных поколениях консолей Microsoft (Xbox Series X) и Sony (PlayStation 5). Поэтому база для игровых разработчиков значительно расширилась, эффекты больше не ограничены ПК.

Как работает трассировка лучей?

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

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

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

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

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

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

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

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

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

Сочетание разных технологий трассировки еще больше увеличивает нагрузку, даже на новых видеокартах GeForce RTX говорить рендеринге полной сцены в реальном времени преждевременно. Пока что NVIDIA предлагает через интерфейс DirectX следующие эффекты:

  • Отражения и преломления
  • Тени и освещение
  • Глобальное освещение
  • Расчеты физики, определение коллизий, симуляция частиц
  • Симуляция аудио (NVIDIA VRWorks Audio)
  • In-Engine Path Tracing

Игры обычно используют лишь часть приведенных эффектов. Но разработчики не сидят, сложа руки. В Metro: Exodus изначально появились лишь самые простые расчеты теней и глобального освещения через трассировку лучей. Но в Enhanced Edition набор эффектов был расширен, теперь, в частности, поддерживается расчет нескольких отражений луча.