В 2018 году Nvidia добилась больших успехов. Представив свои видеокарты GeForce RTX, производитель указал путь для всей отрасли. Поддерживаемая PlayStation 5 и Xbox Series X|S, трассировка лучей также была принята AMD и стала обязательной технологией.
Стоит ли учитывать трассировку лучей при покупке ноутбука или видеокарты? И что такое трассировка лучей? Это именно то, что мы собираемся исследовать в этой статье.
Что такое трассировка лучей
Прежде чем углубиться в детали и, говоря максимально просто, трассировка лучей – это метод, который позволяет эмулировать путь света и его взаимодействие с окружающей средой, другими словами, его изменение по отношению к физическим явлениям и объектам; включая эффекты отражения и преломления, а также тени и другие более сложные оптические явления.
Кино и видеоигры: два мира в постоянном сближении
Не совсем новая, эта техника была разработана Артуром Аппелем, инженером IBM, в 1969 году. После долгого пути, усеянного ловушками, в частности, из-за высокой стоимости, она медленно обосновалась в кино, прежде чем была демократизирована благодаря студии Pixar в 2006 году с анимационным фильмом «Тачки». С тех пор киноиндустрия приняла эту технику для создания ещё более реалистичных сцен и спецэффектов.
Почему же трассировка лучей не появилась в компьютерных играх раньше? По той простой причине, что процесс крайне прожорлив с точки зрения вычислительной мощности. Студии, которые его используют, имеют значительные средства для его реализации. В реальности каждый кадр предварительно просчитывается с помощью «рендер-ферм» (в основном, суперкомпьютеров) после создания сцены, при этом трассировка лучей по-прежнему связана с другими алгоритмами, такими как трассировка пути или фотонное картирование.
Мы понимаем, что это не может быть то же самое для видеоигры, которая должна работать в реальном времени, за исключением кинематографических сцен, конечно. Наблюдение тем более поразительно, что частота кадров в кинотеатре намного ниже. Там, где фильм транслирует 24 кадра в секунду, игра будет стремиться к 60 кадрам в секунду, даже 120 и более. Таким образом, графический чип должен вычислять каждое изображение менее чем за 16 миллисекунд.
Так как же Nvidia удалось внедрить трассировку лучей и сопутствующие вычисления в реальном времени?
Где-то между иллюзией и реализмом, тенями и светом
Конвейер рендеринга и растеризация
Чтобы понять, как работает трассировка лучей, вы должны сначала посмотреть на графический рендеринг и на то, как раньше обрабатывалось освещение. Не вдаваясь в детали всего конвейера рендеринга, необходимо упомянуть растеризацию, используемую для отображения 3D-объектов на экране, который, в свою очередь, ограничен двумя измерениями. И да, наши мониторы и даже наши гарнитуры виртуальной реальности отображают только 2D-изображение.
Алгоритмы растеризации используют координаты, полученные на параллельных этапах 3D-рендеринга, для преобразования векторного изображения в растровое изображение, другими словами, геометрические примитивы… строки пикселей, которые затем сохраняются в буфере кадра перед отправкой на экран.
Этот процесс позволяет «рисовать» объект и цвета на экране, но он требует множества параллельных настроек для создания реалистичной среды. Во-первых, это сглаживание, отображение, анизотропная фильтрация и, конечно же, применение теней с шейдерами, света и других отражений.
Текстуры, цвета, ориентация и положение в пространстве и другие характеристики объектов создаются в соответствии с видением разработчиков. Освещение является «фиктивным», основанным исключительно на теоретических расчетах, которые определяют игру теней и света, применяемую в соответствии с ориентацией и расположением объектов.
Графика развивалась с годами, например, с появлением текстур, которые могут имитировать отражение, но, поскольку источники света статичны, всё ещё было трудно приблизиться к фотореалистичному рендерингу.
Дело в том, что есть ещё один фундаментальный элемент, который необходимо учитывать, в отличие от кино, игрок ходит со своей камерой и смотрит на виртуальным мир под разными углами зрения – иллюзия быстро теряет свою «магию».
Как работает трассировка лучей
Трассировка лучей привносит тот динамизм, которого остро не хватало как в играх, которые полагаются на реализм, так и в играх с необычной Вселенной и элементами окружения, которые менее соответствуют реальности. Чтобы привнести в изображение эту естественность, необходимо учитывать физические явления, с которыми мы сталкиваемся в реальном мире.
Чтобы точно имитировать поведение волн, что невозможно при растеризации, алгоритмы трассировки лучей «выбрасывают лучи» – фотоны – из камеры, а не к ней. Таким образом, траектория лучей движется наружу, лучи взаимодействуют с окружающей средой, объектами и другими поверхностями и могут отражаться настолько, насколько это необходимо, и имитировать явления преломления, отражения или даже дифракции.
Этот метод позволяет ограничить ненужные векторные вычисления, поскольку здесь фотоны движутся в противоположном направлении. Рассчитываются только те лучи, которые начинаются с точки зрения зрителя, что обеспечивает невероятную экономию по сравнению с моделью, в которой должен рассчитываться каждый луч, исходящий от одного или нескольких источников света.
Уже с начала 90-х годов реализуется минималистская форма техники, это raycasting. Идея проста: провести луч от камеры к объекту, чтобы создать модель, 3D-эффект из 2D-окружения. Как вы поняли, это начало видеоигр, какими мы их знаем сегодня, с Wolfenstein 3D и Doom, которые чуть позже приведут к более совершенным формам, например, к Quake, Myst или Alone in the Dark.
Трассировка лучей идёт намного дальше: она предлагает возможность рекурсивного отбрасывания лучей, то есть каждый раз, когда луч попадает на объект, один или несколько лучей будут проецироваться в других направлениях, принимая во внимание природу объекта, его поверхность, текстуру, цвет и так далее.
Трассировка лучей и вычисления в реальном времени: революция
Представленная Nvidia в 2018 году архитектура Turing включала новый тип вычислительных блоков наряду с тензорными ядрами и ядрами CUDA. Это ядра RT, предназначенные для ускорения и управления вычислениями трассировки лучей в реальном времени. Два года спустя архитектура Ampere попала в самую точку благодаря более высокому уровню производительности и уже более зрелой технологии.
Сегодня Nvidia остаётся на шаг впереди AMD, которой потребовалось некоторое время, чтобы внедрить трассировку лучей со своей архитектурой RDNA 2. Тем не менее, нет никаких сомнений в том, что красные быстро восстановились и битва идёт на равных.
Nvidia настолько увязала себя с трассировкой лучей, что сегодня нередко можно услышать, как многие геймеры используют название «RTX» для обозначения этой технологии.
Как мы видели, трассировка лучей (RT) – это метод, который можно использовать не только в видеоиграх, но и во многих других областях. RTX – это торговая марка, зарегистрированная Nvidia, это платформа, которая объединяет различные технологии, начиная с трассировки лучей, но также машинного обучения и растеризации. Он также интегрирует API и SDK, функции для ускорения конвейера рендеринга. Мы можем упомянуть OptiX, DirectX и Vulkan для трассировки лучей, PhysX, FleX и CUDA для моделирования взаимодействия объекта и среды.
Теперь вопрос, который нас интересует, заключается в том, как становятся возможными вычисления в реальном времени. Стали ли графические карты следующего поколения такими же мощными, как суперкомпьютеры голливудских студий?
Архитектуры Turing и Ampere в сочетании с технологиями вычислений в реальном времени и снижением точности гравировки чипов (и увеличением их размера) впервые в 2018 году позволили воспользоваться преимуществами потребительских графических процессоров с достаточной производительностью для управления трассировкой лучей. С тех пор во многих играх использовалась трассировка лучей, а также технологии, разработанные с целью снижения требований к ресурсам, а значит, и неизбежного падения частоты кадров при активации трассировки лучей.
Однако, между демонстрационными видеороликами и рендерингом в игре существует целый мир. По правде говоря, возможности, предлагаемые разработчикам, многочисленны, но они обязаны делать выбор, чтобы создавать идеально плавные сцены и окружение, а не жертвовать частотой кадров. В большинстве случаев трассировка лучей используется в определенных областях, которые больше всего способствуют реалистичности сцены, в то время как растеризация продолжает работать с известной нам эффективностью и, прежде всего, за счёт гораздо меньшей вычислительной мощности.
Чем больше лучей используется на пиксель, тем качественнее будет изображение и тем «дороже» будут вычисления. Хороший компромисс заключается в использовании фильтров шумоподавления, ускоренных благодаря машинному обучению, с ядрами RT для Nvidia. Цель состоит в том, чтобы сэкономить время рендеринга, выбрав только самые важные лучи, и при этом создать изображение высокого качества.
Некоторые примеры трассировки лучей в играх
Как упоминалось выше, в видеоиграх трассировка лучей встречается «фрагментами». Её использование иногда экономно, иногда гораздо более полно.
В основном, мы найдём трассировку лучей на элементах, которые привносят реализм в сцену, в частности:
- Создание простых теней и отражений
- Имитация прямого освещения
- Имитация непрямого освещения (Global Illumination)
- Комбинация прямого и непрямого освещения для создания полных сцен (Full Ray Tracing)
- Создания звуковой среды (мы говорим о трассировке аудио лучей)
Cyberpunk 2077 – одна из игр, в которой трассировка лучей используется больше всего, – настоящая демонстрация этой технологии. Трудно не увлечься маленькой игрой «найди 7 отличий», – трассировка лучей полностью преображает изображение.
Control также многое делает для демонстрации преимуществ трассировки лучей. Наши сравнительные изображения говорят сами за себя, поэтому сцена без трассировки лучей выглядела бы почти «пустой».
Использование трассировки лучей гораздо более дозировано в The Medium и довольствуется отражениями и тенями. Тем не менее, она может существенно изменить сцену.
Doom Eternal использует лишь несколько эффектов отражения, что не мешает привнести в изображение немного дополнительной души.
Апскейлинг (DLSS и FSR) – чудодейственное средство?
Другое решение для экономии вычислений исходит из технологий, называемых DLSS для Deep Learning Super Sampling в Nvidia и FSR для FidelityFX Super Resolution в AMD.
Эти две технологии заключаются в выполнении рендеринга игры в более низком разрешении перед её масштабированием до разрешения дисплея. Процесс осуществляется с использованием алгоритмов и нейронных сетей для DLSS и более традиционного пространственного апскейлинга для FSR.
Основная задача состоит в том, чтобы компенсировать потерю частоты кадров, вызванную вычислениями, связанными с трассировкой лучей. Масштабирование может быть более или менее точным, цель состоит в том, чтобы найти правильный компромисс между качеством и производительностью в зависимости от игры и разрешения.
Апскейлинг также может принести много пользы играм без трассировки лучей! Это, по крайней мере, идея Nvidia, которая теперь разрешает реализацию своего DLSS в различных играх, – добродетельный подход, который, однако, требует демократизации. FSR имеет открытый исходный код и логически менее сложен для реализации разработчиками.
Nvidia также предлагает метод, основанный на пространственном масштабировании: Nvidia Image Scaling. Он менее эффективен, чем DLSS,
Аудио трассировка лучей – что это такое
Более чем свет, звук – это волна, распространяющаяся в пространстве. Так почему бы не применить технику трассировки лучей к звуку? Это кажется тем более логичным, поскольку проблема похожа на проблему со светом в игре: в реальном мире звук отличается в зависимости от нашего положения, поверхностей, от которых он отражается, или даже от природы объектов, с которыми он взаимодействует.
Таким образом, хорошей идеей трассировки аудиолучей является использование тех же алгоритмов, но на этот раз для имитации перемещения звуковых волн в пространстве с целью приближения к трехмерному звуку и улучшения эффекта погружения. Ещё раз, здесь речь идет о привнесении всё большего и большего реализма.
Первая известная реализация трассировки звуковых лучей была сделана студией Playground Games с Forza Horizon 5 на Xbox Series X. Там рёв двигателей адаптируется в реальном времени к среде игрока. Для этого разработчикам пришлось определить физические характеристики многих элементов, например, вибрации не распространяются одинаково в туннеле, на улице или на шоссе, и не все материалы одинаково поглощают или отражают звук. Наконец, нет необходимости вычислять полную траекторию волны, а только те, которые воздействуют на слушателя.
Хотя на бумаге эта концепция кажется привлекательной для улучшения опыта геймеров, она, как и другие программные решения для объёмного звучания, по-прежнему сталкивается с ограничениями аппаратного обеспечения, используемого геймерами. Может ли слушатель обнаружить разницу с помощью гарнитуры начального уровня или через динамики телевизора?