Как работает трассировка лучей
Как стало известно из анонса архитектуры Turing и профессиональных решений линейки Quadro RTX на конференции SIGGraph, новые графические процессоры компании Nvidia, кроме ранее известных блоков, впервые включают также и специализированные RT-ядра, предназначенные для аппаратного ускорения трассировки лучей. Пожалуй, большая часть дополнительных транзисторов в новых GPU принадлежит именно к этим блокам аппаратной трассировки лучей, ведь количество традиционных исполнительных блоков выросло не слишком сильно, хотя и тензорные ядра немало повлияли на увеличение сложности GPU.
Nvidia сделала ставку на аппаратное ускорение трассировки при помощи специализированных блоков, и это большой шаг вперед для качественной графики в реальном времени.
Благодаря семейству GeForce RTX уже сейчас можно использовать трассировку для некоторых эффектов: качественных мягких теней (реализовано в игре Shadow of the Tomb Raider), глобального освещения (ожидается в Metro Exodus и Enlisted), реалистичных отражений (Battlefield V), а также сразу нескольких эффектов одновременно (показано на примерах Assetto Corsa Competizione, Atomic Heart и Control). При этом для GPU, не имеющих аппаратных RT-ядер в своем составе, можно использовать или привычные методы растеризации, или трассировку на вычислительных шейдерах, если это будет не слишком медленно. Вот так по-разному обрабатывают трассировку лучей архитектуры Pascal и Turing:
Как видите, RT-ядро полностью принимает на себя работу по определению пересечений лучей с треугольниками. Скорее всего, графические решения без RT-ядер в своем составе будут смотреться не слишком сильно в проектах с применением трассировки лучей, ведь эти ядра специализируются исключительно на расчетах пересечения луча с треугольниками и ограничивающими объемами (BVH), оптимизирующими процесс и важнейшими для ускорения процесса трассировки.
Каждый мультипроцессор в чипах Turing содержит RT-ядро, выполняющее поиск пересечений между лучами и полигонами, а чтобы не перебирать все геометрические примитивы, в Turing используется распространенный алгоритм оптимизации — иерархия ограничивающих объемов (Bounding Volume Hierarchy — BVH). Каждый полигон сцены принадлежит к одному из объемов (коробок), помогающих наиболее быстро определить точку пересечения луча с геометрическим примитивом. При работе BVH нужно рекурсивно обойти древовидную структуру таких объемов. Сложности могут возникнуть разве что для динамически изменяемой геометрии, когда придется менять и структуру BVH.
Что касается производительности новых GPU при трассировке лучей, то публике назвали цифру в 10 гигалучей в секунду для топового решения GeForce RTX 2080 Ti. Не очень понятно, много это или мало, да и оценивать производительность в количестве обсчитываемых лучей в секунду непросто, так как скорость трассировки очень сильно зависит от сложности сцены и когерентности лучей и может отличаться в десяток раз и более. В частности, слабо когерентные лучи при обсчете отражений и преломлений требуют большего времени для расчета по сравнению с когерентными основными лучами. Так что показатели эти чисто теоретические, а сравнивать разные решения нужно в реальных сценах при одинаковых условиях.
Но Nvidia сравнила новые GPU с предыдущим поколением, и в теории они оказались до 10 раз быстрее в задачах трассировки. В реальности же разница между RTX 2080 Ti и GTX 1080 Ti будет, скорее, ближе к 4-6-кратной. Но даже это — просто отличный результат, недостижимый без применения специализированных RT-ядер и ускоряющих структур типа BVH. Так как бо́льшая часть работы при трассировке выполняется на выделенных RT-ядрах, а не CUDA-ядрах, то снижение производительности при гибридном рендеринге будет заметно ниже, чем у Pascal.
Мы уже показывали вам первые демонстрационные программы с применением трассировки лучей. Некоторые из них были более зрелищными и качественными, другие впечатляли меньше. Но о потенциальных возможностях трассировки лучей не стоит судить по первым выпущенным демонстрациям, в которых намеренно выпячивают на первый план именно эти эффекты. Картинка с трассировкой лучей всегда реалистичнее в целом, но на данном этапе массы еще готовы мириться с артефактами при расчете отражений и глобального затенения в экранном пространстве, а также другими хаками растеризации.


Игровым разработчикам очень нравится трассировка, их аппетиты растут на глазах. Создатели игры Metro Exodus сначала планировали добавить в игру лишь расчет Ambient Occlusion, добавляющий теней в основном в углах между геометрией, но затем они решили внедрить уже полноценный расчет глобального освещения GI, который выглядит впечатляюще:
Кто-то скажет, что ровно так же можно предварительно рассчитать GI и/или тени и «запечь» информацию об освещении и тенях в специальные лайтмапы, но для больших локаций с динамическим изменением погодных условий и времени суток сделать это просто невозможно! Хотя растеризация при помощи многочисленных хитрых хаков и трюков действительно добилась отличных результатов, когда во многих случаях картинка выглядит достаточно реалистично для большинства людей, все же в некоторых случаях отрисовать корректные отражения и тени при растеризации невозможно физически.
Самый явный пример — отражения объектов, которые находятся вне сцены — типичными методами отрисовки отражений без трассировки лучей отрисовать их невозможно в принципе. Также не получится сделать реалистичные мягкие тени и корректно рассчитать освещение от больших по размеру источников света (площадные источники света — area lights). Для этого пользуются разными хитростями, вроде расставления вручную большого количества точечных источников света и фейкового размытия границ теней, но это не универсальный подход, он работает только в определенных условиях и требует дополнительной работы и внимания от разработчиков. Для качественного же скачка в возможностях и улучшении качества картинки переход к гибридному рендерингу и трассировке лучей просто необходим.
Трассировку лучей можно применять дозированно, для отрисовки определенных эффектов, которые сложно сделать растеризацией. Точно такой же путь в свое время проходила киноиндустрия, в которой в конце прошлого века применялся гибридный рендеринг с одновременной растеризацией и трассировкой. А еще через 10 лет все в кино постепенно перешли к полноценной трассировке лучей. То же самое будет и в играх, этот шаг с относительно медленной трассировкой и гибридным рендерингом невозможно пропустить, так как он дает возможность подготовиться к трассировке всего и вся.
Тем более, что во многих хаках растеризации уже и так используются схожие с трассировкой методы (к примеру, можно взять самые продвинутые методы имитации глобального затенения и освещения), поэтому более активное использование трассировки в играх — лишь дело времени. Заодно она позволяет упростить работу художников по подготовке контента, избавляя от необходимости расставлять фейковые источники света для имитации глобального освещения и от некорректных отражений, которые с трассировкой будут выглядеть естественно.
Переход к полной трассировке лучей (path tracing) в киноиндустрии привел к увеличению времени работы художников непосредственно над контентом (моделированием, текстурированием, анимацией), а не над тем, как сделать неидеальные методы растеризации реалистичными. К примеру, сейчас очень много времени уходит на расставление источников света, предварительный расчет освещения и «запекание» его в статические карты освещения. При полноценной трассировке это будет не нужно вовсе, и даже сейчас подготовка карт освещения на GPU вместо CPU даст ускорение этого процесса. То есть переход на трассировку обеспечит не только улучшение картинки, но и скачок в качестве самого контента.
В большинстве игр возможности GeForce RTX будут использоваться через DirectX Raytracing (DXR) — универсальный API Microsoft. Но для GPU без аппаратной/программной поддержки трассировки лучей также можно использовать D3D12 Raytracing Fallback Layer — библиотеку, которая эмулирует DXR при помощи вычислительных шейдеров. Эта библиотека имеет схожий, хоть и отличающийся интерфейс по сравнению с DXR, и это несколько разные вещи. DXR — это API, реализуемый непосредственно в драйвере GPU, он может быть реализован как аппаратно, так и полностью программно, на тех же вычислительных шейдерах. Но это будет разный код с разной производительностью. Вообще, изначально Nvidia не планировала поддерживать DXR на своих решениях до архитектуры Volta, но теперь и видеокарты семейства Pascal работают через DXR API, а не только через D3D12 Raytracing Fallback Layer.
Приобрести компьютер на базе графических ускорителей Nvidia GeForce, поддерживающих инновационную технологию Ray Tracing вы можете у нас на сайте — HYPERPC
