Несколько недель назад на выставке GDC 2018 в Сан-Франциско компании Microsoft, Nvidia и ряд игровых студий показали будущее графики в реальном времени в виде нескольких демонстраций технологии трассировки лучей (Ray Tracing) с ускорением на графических процессорах. Вместе с этими демонстрациями состоялся анонс Microsoft, которая представила разработку расширения графического интерфейса DirectX 12 для официальной поддержки Ray Tracing на основе GPU — DXR. Также был анонс от Nvidia с собственной поддержкой Ray Tracing на своих GPU — RTX.
Итак, будущее наступает, но что зрителю ожидать от следующего поколения игр? Какие улучшения появятся и как Ray Tracing скажется на игровой графике в краткосрочной перспективе? Давайте вернёмся к начальному клипу из «Звездных войн» производства ILM и Epic.
Здесь на экране можно увидеть много элементов с трассировкой лучей: мягкие тени под шлемами штурмовиков, шлем капитана Фазмы отображает все необходимые элементы, можно увидеть даже вещи вроде размытия в движении или глубины изображения. Больше нет артефактов, которые ожидаешь увидеть при растеризации, где информация отсутствует позади объекта, поэтому её нужно реконструировать или подделывать. Всё выглядит реально, как в настоящем мире. Здесь нет проблем в духе компьютерных игр, к которым за много лет все привыкли. Хотя есть подвох: это не совсем то, чего ждёшь от трассировки лучей на GPU в ближайшем будущем в играх. Также этого не будет на игровых консолях ближайшего будущего. Это демо «Звездных войн» работает на экране 1920 х 1080 со скоростью 24 кадра/с на четырёх видеокартах Nvidia Titan, которые объединены через MV Link. Это чрезвычайно высокоскоростное соединение, которое обеспечивает передовое взаимодействие графических процессоров. Суммарная производительность достигает 60 TFLOPS и 2,6 Тбит/с суммарная пропускная способность. С учётом цены одной такой видеокарты, требований по энергопотреблению и температуре, на консоли следующего поколения с такой графикой с трассировкой лучей вряд ли можно рассчитывать в ближайшее время. Отдельные элементы из этого демо и элементы из демонстраций других разработчиков, вроде Remedy и Epic, позволяют понять, чего можно ожидать в будущих играх от трассировки лучей в реальном времени. Давайте для начала поговорим об основах этой технологии.
В последнее время игры экономят ресурсы за счёт каналов rasterized pipeline с применением GPU по максимуму и в основном на экране. Говоря по-простому, растеризация представляет собой математические уравнения, которые описывают форму объекта и преобразуют их в дискретные блоки — пиксели, полигоны и сегменты линий. Тут есть проблемы, которые видны во всех случаях превращения сложной информации в упрощённую форму. Например, у вас может быть математическое описание круга. Когда вы пытаетесь представить его дискретными блоками в виде пикселей, проблемы видны невооружённым взглядом.
Сглаживание приводит к недостаточности выборки. Позиция выборки и растеризация также могут иметь эффект выбитых частиц. Например, посмотрите на карты теней в большинстве игр. В зависимости от того, где происходит выборка, на переднем или заднем плане геометрии, можно получить проблемы, когда тени не соответствуют освещению объекта. Сам свет при реализации также является упрощением. Перенос света представляет собой отражение и распространение фотонов, освещение и повторное освещение поверхностей. Всё это при растеризации сокращается в более-менее одномерную проблему того, как поверхность отображает тени. Таким образом, все сложности уменьшаются до отдельных, более предсказуемых и вычисляемых объектов для видеокарты, чтобы ускорить отображение. Трассировка лучей использует другой, более широкий подход. Математические уравнения моделируют распространение фотонов за счёт испускания лучей или конусов лучей на сцену. Это более приземлённый способ получения результата поведения света. Однако придётся генерировать очень много лучей. В отличие от игровых проблем нехватки выборки и растеризации нехватка выборки при трассировке лучей приводит к зернистым несвязанным изображениям. Трассировка лучей более точная, но она требует больше аппаратной мощи для получения нормального результата. Проблема испускания большого количества лучей, чтобы изображение выглядело корректным, со временем может быть решена при помощи более мощного оборудования и увеличения количества лучей. Разработчики и исследователи ищут варианты устранения шума, сглаживания данных и подгонки пикселей на основе предыдущих кадров или шаблонов машинного обучения, чтобы эти дорогие лучи выдавали максимальное качество.
Хотя DXR является новинкой, разработчики пытаются интегрировать хотя бы кусочки трассировки лучей в графику в реальном времени уже не первый день. Главным образом это происходит на экране. Окружающий свет, отражение в реальном времени и даже тени во многих играх воссоздаются на основе информации на экране. Информация на экране представляет собой информацию, которая видна только в текущем кадре, поэтому все эти методы имеют проблему с данными при отображении того, что происходит за пределами кадра. Например, игра Crysis 2. Отражения в реальном времени исчезают для тех объектов, которые не видны. Окружающее освещение в реальном времени показывается или не показывается на участках, где это имеет физический смысл. Даже очень реалистичная игра Kingdom Come: Deliverance — здесь тени небольших объектов искривляются и изгибаются в зависимости от того, насколько близко они к краю экрана или закрыты ли другим объектом. Эти участки и такие распространённые ранее упомянутые проблемы растеризации представляют собой именно те случаи, где трассировка лучей GPU придёт на помощь в будущем и в ближайших играх. Трассировка лучей нацеливается, но не нуждается в переносе этих приближений с экрана на приближения в реальном мире на основе принципов переноса света. Рассмотрим проблемы с отражениями в реальном времени в Quantum Break. Вы увидите, как демо движка Northlight не имеет проблем с исчезновением отражений, когда объекты пропадают из кадра. Или в демо Metro Exodus непрямое освещение и тени остаются постоянными на всём изображении при движении камеры по сцене без исчезновения теней по краям экрана или изменений во время движения. Обратите внимание, насколько отчётливые тени в демо Unreal Engine и как они выравниваются относительно объекта, но при этом размываются ближе к точке исчезновения. Это очевидные варианты обработки в реальном времени в играх, которые в будущем станут лучше. Но это ещё не всё. Не нужно даже ждать, игры уже решают проблемы с трассировкой лучей GPU прямо сейчас.
Например, Claybook. Он использует трассировку конусов лучей на основе GPU для создания теней, форм и окружающего освещения на расстоянии. Эти визуальные элементы превращаются в упрощённую версию сцены, которые отображаются с расстояния. Можно представить это как бесформенные аморфные версии объектов на экране в большинстве игр. Или же посмотрим для примера на CryEngine. Недавние игры вроде Kingdom Come: Deliverance генерируют глобальную подсветку и масштабное включение за счет трассировки упрощённой версии сцены из вокселей. Можно сказать, что это LEGO-версия сцены. Даже игра Fortnite на скорости 60 кадров/с на консолях использует трассировка лучей GPU, отказываясь от дорогих карт теней. После первого каскада Fortnite экономит системные ресурсы центрального и графического процессора и генерирует более точные визуальные эффекты за счёт создания окружающего освещения и теней с трассировкой лучей при помощи глубины изображения игрового мира. Таким образом, ещё нельзя сказать, что с появлением DXR трассировка лучей приходит в реальный рендеринг игр. Даже если разработчики не используют трассировку лучей сейчас или в будущем, это не делает DXR бесполезной в процессе разработки. В играх вроде Uncharted 4 или других, которые хотят сосредоточить свой бюджет на рендеринг на других элементах, не связанных с трассировкой лучей в реальном времени, и применяют статические свет и тени. Здесь трассировка лучей GPU может влиять на эффективность разработки игр, позволяя художникам заранее видеть результаты освещения и теней в реальном времени. Это сэкономит время разработки на итерации вместо ожидания в течение минут или часов, чтобы увидеть, как игровое окружение будет выглядеть в заданном освещении.
Имеются даже более экзотические варианты применения трассировки лучей, которые ещё только предстоит полностью изучить. Методы, выборка и структуры данных трассировки лучей могут использоваться для невизуальных элементов, таких как нахождение пути искусственным интеллектом или процедурное распределение объектов. Говоря с разработчиками о трассировке лучей и DXR, мы можем предположить, что существующая структура и нарождающейся версия интерфейса прикладного программирования имеют свои проблемы. Она ограничена платформой Windows 10 и делает предположения относительно типа трассировки лучей, которые будут пробовать разработчики. Однако, DXR и Nvidia RTX рассматриваются как способ движения в сторону дополнительных исследований и реализации в игровых движках, на основе чего будут разрабатываться будущие версии интерфейса. В частности, устранение зернистости и освещение непрозрачных поверхностей, лучшее сочетание растеризации и трассировки лучей станут большой областью исследований. Таким образом, разработчики будут экспериментировать с этими технологиями и развивать игры для поиска лучшего метода создания визуальных эффектов на основе дорогостоящих лучей. При помощи Nvidia и Microsoft, а в будущем с помощью AMD и Chronos, появится стандартизация методов и программный API, что упростит разработчикам обмен и преобразование этих экспериментов. Будущее выглядит многообещающим.