Что такое трассировка лучей и как она отличается от игры к игре?

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

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

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

Краткий учебник по компьютерной графике и растеризации

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

Попытка симулировать «бесконечность» с помощью конечного ресурса, такого как вычислительная мощность компьютера, — это путь к катастрофе. Нам нужны умные приближения, и именно так в настоящее время работает современный рендеринг графики (в играх).

Мы называем этот процесс растеризацией, и вместо того, чтобы рассматривать бесконечные объекты, поверхности и фотоны, он начинается с многоугольников, в частности, с треугольников. Игры перешли от сотен к миллионам полигонов, и растеризация превращает все эти данные в 2D-кадры на наших дисплеях.

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

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

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

Что такое трассировка лучей и как она отличается от игры к игре?

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

Трассировка лучей — это другой подход, впервые предложенный Тернером Уитедом в 1979 году в «Улучшенной модели освещения для затененного дисплея» (онлайн-версия PDF). Тернер описал, как рекурсивно рассчитать трассировку лучей, чтобы получить впечатляющее изображение с тенями, отражениями и многим другим. (Не случайно, Тернер Уитед теперь работает в исследовательском отделе Nvidia.) Проблема в том, что для этого требуются даже более сложные вычисления, чем растеризация.

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

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

Согласно Nvidia, наиболее часто используемым алгоритмом трассировки лучей является BVH Traversal: обход иерархии ограниченного объема. Это то, что использует DXR API, и то, что ускоряют ядра RT Nvidia. Основная идея состоит в том, чтобы оптимизировать вычисления пересечения луча и треугольника. Возьмите сцену с тысячами объектов, каждый из которых может содержать тысячи полигонов, а затем попытайтесь выяснить, с какими полигонами пересекается луч. Это поисковая проблема, и на грубую силу потребуется очень много времени. BVH ускоряет это, создавая дерево объектов, где каждый объект заключен в рамку.

Nvidia предоставила приведенный выше пример луча, пересекающего модель кролика. На верхнем уровне BVH (блок) содержит весь кролик, и вычисление определяет, что луч пересекает этот блок — если это не так, больше не требуется никакой работы для этого блока / объекта / BVH. Поскольку было пересечение, алгоритм BVH получает набор меньших прямоугольников для пересекаемого объекта — в этом случае он определяет, что рассматриваемый луч попал в объект кролика в голове. Дополнительные обходы BVH происходят до тех пор, пока в конечном итоге алгоритм не получит краткий список фактических полигонов, которые он затем может проверить, чтобы определить, какой полигон кролика попадает в луч.

Эти вычисления BVH могут быть выполнены с использованием программного обеспечения, работающего на CPU или GPU, но выделенное оборудование может ускорить процесс на порядок. Ядра RT на картах RTX от Nvidia представлены в виде черного ящика, который принимает структуру BVH и луч, циклически проходит всю грязную работу и выплевывает желаемый результат того, какой (если он есть) полигон был пересечен.

Это недетерминированная операция, означающая, что невозможно точно сказать, сколько лучей можно вычислить в секунду — это зависит от сложности сцены и структуры BVH. Важно то, что RT-ядра Nvidia могут запускать алгоритм BVH примерно в десять раз быстрее, чем его ядра CUDA, что, в свою очередь, потенциально в десять раз (или более) быстрее, чем работа с процессором (в основном из-за количества ядер GPU). по сравнению с ядрами процессора).

Сколько лучей на пиксель «достаточно»? Это варьируется — с плоской неотражающей поверхностью гораздо легче справиться, чем с изогнутой блестящей поверхностью. Если лучи отражаются между сильно отражающими поверхностями (например, эффект зеркального зала), могут потребоваться сотни лучей. Выполнение полной трассировки лучей для сцены может привести к десяткам или более расчетам лучей на пиксель, при этом лучшие результаты достигаются при большем количестве лучей.

Несмотря на сложность, почти каждый крупный фильм в наши дни использует трассировку лучей (или трассировку путей) для создания высокодетализированных компьютерных изображений. Полный 90-минутный фильм со скоростью 60 кадров в секунду потребует 324 000 изображений, и каждое изображение может занять часы вычислительного времени. Как игры могут делать все это в режиме реального времени на одном графическом процессоре? Ответ заключается в том, что они не будут, по крайней мере, не в том разрешении и качестве, которое вы можете увидеть в голливудском фильме.

Что такое трассировка лучей и как она отличается от игры к игре?

Введите гибридный рендеринг

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

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

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

Что такое трассировка лучей и как она отличается от игры к игре?

Размышления

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

Простая версия создания отраженных лучей отражений первоначально использовалась в Battlefield 5. После визуализации кадра один луч на пиксель будет использоваться для определения того, какое отражение (если оно есть) должно быть видимым. Тем не менее, многие поверхности не были отражающими, так что это привело к большой избыточной работе. Оптимизированный алгоритм BF5 рассчитывает лучи только для пикселей на отражающих поверхностях, а частично отражающие поверхности используют один луч на два пикселя.

Поскольку многие поверхности вообще не отражают, эффект часто менее драматичен, но он также менее затратен с точки зрения вычислительной мощности. В вычислительном отношении для трассировки лучей по отражениям требуется, по крайней мере, один луч на отражающий пиксель, возможно, больше, если имитируются отскоки (что не имеет место в BF5). Unreal Engine работает Отражение Демо — функция штурмовиков в полированной белой и зеркальной серебряной броне в коридоре и лифте со сложными источниками света. Это требует больше лучей и вычислительной мощности, что объясняет, почему один RTX 2080 Ti управляет только 54 кадрами в секунду при 1080p, по сравнению с 85 кадрами в секунду при 1080p в BF5.

Что такое трассировка лучей и как она отличается от игры к игре?

Тени

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

Это только верхушка айсберга, однако. Трассировка лучей предлагает разработчикам широкую палитру инструментов для рендеринга теней, от простых методов, подобных описанным мною, до действительно сложных методов, которые очень близки к нашему восприятию реального мира. Реализация трассировки лучей в Shadow of the Tomb Raider (которая вышла в сильно отложенном патче после запуска) является отличным примером широты и глубины вариантов.

Что такое трассировка лучей и как она отличается от игры к игре?

Существует много потенциальных типов источников света: точечные источники света — это маленькие всенаправленные источники света, такие как свечи или отдельные лампочки. Прямоугольные тени, как неоновые вывески или окна, ведут себя по-разному. Они излучают свет от большей области, и получающиеся тени имеют сильно рассеянную полутень (область на краю тени, которая обычно светлее темного интерьера). Направленные источники света, включая прожекторы, фонарики и солнце, излучают свет только в определенных направлениях.

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

Что такое трассировка лучей и как она отличается от игры к игре?

Окружающая окклюзия

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

Группа SEED EA создала демонстрацию Pica Pica с использованием DXR (DirectX Ray Tracing), и в какой-то момент она показывает разницу между SSAO (окклюзия окружающего пространства экрана, наиболее распространенное решение до RT) и RTAO (окклюзия окружения с трассировкой лучей). Дело не в том, что SSAO выглядит плохо, но RTAO выглядит лучше.

Что такое трассировка лучей и как она отличается от игры к игре?

Каустика

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

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

Что такое трассировка лучей и как она отличается от игры к игре?

Глобальное освещение

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

Представьте себе темную комнату, в которой открыто закрытое окно. Это окно не просто освещает маленький прямоугольник на стене и полу — свет отражается от поверхностей, и вся комната становится ярче. Глобальное освещение излучает сложную сеть лучей, направляя их вокруг сцены и генерируя дополнительные лучи, чтобы помочь осветить сцену.

Что такое трассировка лучей и как она отличается от игры к игре?

В Metro Exodus используется трассировка GI-лучей, поэтому производительность может быть столь существенной. В зависимости от сцены, эффект может быть довольно заметным (например, в плохо освещенной комнате с окном), в то время как в других сценах (например, снаружи) это не имеет большого значения. Но даже когда это не обязательно меняет внешний вид сцены, оно обычно требует больших вычислительных ресурсов, чем отражения, используемые в Battlefield 5 или сложные теневые процессы в Tomb Raider.

Даже без трассировки лучей Metro Exodus может наказать скромное графическое оборудование. Но с трассировкой лучей Metro становится современным Crysis с точки зрения визуальной точности и новым титаном, с которым измеряются новые блестящие высокопроизводительные графические процессоры.

Использование шумоподавления и искусственного интеллекта для улучшения производительности

Если вы посмотрите на приведенные выше примеры трассировки лучей в играх, вы увидите, что большинство игр в настоящее время реализуют только один или два эффекта трассировки лучей. У BF5 есть отражения, у SotTR есть тени, а у Metro — GI. В идеальном мире, где игры используют трассировку лучей в полную силу, мы бы хотели получить все эти эффекты и даже больше! Однако это обычно недоступно для современных графических процессоров, по крайней мере, если вы надеетесь на более высокую частоту кадров.

Однако есть способы уменьшить сложность. Один простой подход состоит в том, чтобы проследить меньшее количество пикселей. Это можно сделать одним из двух способов. Алгоритм Nvidia DLSS позволяет игре, в которой реализована технология, визуализировать с более низким разрешением (скажем, в два раза меньше пикселей), а затем использовать ИИ, чтобы повысить результат при удалении неровностей. Это не будет идеально, но это может быть достаточно близко, чтобы это не имело большого значения.

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

Добро пожаловать в будущее графики

Крупные имена в рендеринге стали популярными в мире трассировки лучей, включая Epic, Unreal Engine, Unity 3D и Frostbite от EA. Microsoft объединилась с производителями оборудования и разработчиками программного обеспечения для создания совершенно нового API DirectX Ray Tracing (DXR), основанного на существующей платформе DX12. Трассировка лучей в той или иной форме всегда была целью компьютерной графики в реальном времени, и теперь мы значительно приблизились к этому финалу. (Извините, Мстители.)

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

Просто посмотрите на последнее десятилетие графических процессоров. Первым графическим процессором Nvidia с ядрами CUDA был 8800 GTX с 128 ядрами CUDA еще в конце 2006 года. 13 лет спустя у нас было почти в 40 раз больше ядер CUDA, и каждое ядро ​​стало значительно более мощным.

На RTX 2080 Ti полная трассировка лучей в реальном времени для каждого пикселя сегодня не очень практична, но графическая индустрия движется в этом направлении в течение многих лет. Будут ли у нас в 2030 году графические процессоры с тысячами ядер для трассировки лучей? Мы бы не стали делать ставки против этого.

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

Без сомнения, это сложная проблема. Но если мы надеемся приблизиться к Голодек Звездного Пути или Оазису Готового Первого Игрока, путь будет ясен. В этом контексте трассировка лучей действительно выглядит как следующая большая ступенька к действительно фотореалистичным играм.