Настоятельно рекомендуем перед ознакомлением с данным материалом прочитать первую часть статьи.
Гибридный рендеринг
Уже более 20 лет аппаратное обеспечение направлено на ускорение растеризации компьютерной графики. Вместе с тем гейм дизайнеры и художники добились в этом отношении заметных результатов. Однако некоторые вещи по-прежнему вызывают проблемы, например, такие как правильное освещение, тени и отражения.
Гибридный рендеринг применяет традиционные технологии растеризации для отрисовки всех полигонов в фрейме, а затем комбинирует полученный результат с функцией трассировки лучей, где это имеет смысл. Таким образом трассировка лучей становится менее сложной, что позволяет достичь более высокой частоты кадров и при этом сохранить баланс между производительностью и частотой кадров. Использование большего количества лучей в сцене может улучшить общий результат в ущерб частоте кадров и наоборот.
Для того чтобы лучше понять, как трассировка лучей улучшает графику и какие для этого требуются ресурсы, давайте сильнее углубимся в некоторые методы RT и рассмотрим их сложность.
Отражения
Предыдущие методы отражений, такие как Screen Space Reflections (SSR, отражения пространства экрана) имели ряд недостатков. К примеру невозможность отражать объекты вне текущего кадра, а также если они частично или полностью скрыты. Лучи, отраженные с помощью технологии Ray Tracing полноценно работают в 3D пространстве, а не только в видимой части экрана, позволяя создавать правильные отражения.
Простая версия отражений, созданных с помощью трассировки лучей, была первоначально применена в Battlefield 5. После того как фрейм был отрисован, использовался один луч на пиксель для того чтобы определить, какое отражение (если оно есть) должно быть видимым. Тем не менее множество поверхностей не были отражающими и это приводило к большой избыточности выполняемой работы. Оптимизированный алгоритм BF5 просчитывает лучи для пикселей только на отражающих поверхностях, а для частично отражающих поверхностей используется один луч на два пикселя.
Из-за того, что множество поверхностей не имеет отражений совсем, эффект зачастую становится не так заметен, но от этого и требует заметно меньше ресурсов. В плане вычислений, трассировка при отражениях требует по крайней мере один луч на отраженный пиксель, возможно и больше при симуляции отражения лучей (не применяется в BF5). Демо Reflections, созданное на Unreal Engine представляет из себя сцену с сложным освещением, где штурмовики в отполированных белых и зеркальных доспехах, проходят по коридору в лифт. Такая сцена требует больше лучей и вычислительной мощности, что объясняет почему одна RTX 2080 Ti выдает только 54 fps при разрешении 1080p, по сравнению с 85 fps при том же разрешении в BF5.
Тени
Как и в случае с отражениями, существует несколько способов для симуляции теней при помощи трассировки лучей. Простая для понимания реализация отрисовки теней при помощи Ray Tracing применяет один луч для каждого источника света исходящий от каждого пикселя на поверхности. Если луч пересекает объект перед тем как достигнуть источника света, значит этот пиксель должен быть темнее. Также учитываются расстояние до источника света, его яркость и цвет.
Однако это лишь верхушка айсберга. Трассировка лучей предлагает разработчикам широкий выбор инструментов для рендеринга теней – от простых методов, которые мы описали выше, до по-настоящему сложных, способных крайне близко передать поведение теней в реальном мире. Реализация трассировки лучей в игре Shadow of the Tomb Raider – это яркий пример использования широких возможностей технологии.
Зачем нужны XMP профили памяти и как они работают?
Существует множество типов источников освещения: точечные, небольшие источники, как например свечи или отдельные лампы; направленные источники света, в том числе прожекторы и фонарики, излучающие свет только в одном направлении. Дополнительно отметим прямоугольные тени от прожекторов, неоновых вывесок и окон. Подобные тени ведут себя по-разному. Они излучают свет из большей области, а получающиеся тени имеют значительно рассеянную полутень (penumbra, область на краю тени, которая обычно светлее).
При помощи трассировки лучей можно реализовать отбрасывание тени даже через прозрачные поверхности, такие как чистая ткань или края листьев. В таком случае мы получаем более мягкие, точные тени со сложными аморфными полутенями. Эффект становится чрезвычайно убедителен при сравнении с жесткими тенями, получающимися при использовании карты теней.
Ambient occlusion
Ambient occlusion (AO) – это очень специфичная категория рендеринга теней, попытка продублировать более прозрачные тени, которые мы видим в углах, расщелинах и небольших пространствах в объектах и вокруг них. AO работает с помощью отслеживания нескольких очень коротких лучей внутри области, в некоем облаке вокруг нее и определения того пересекаются ли лучи с близлежащими объектами. Чем больше пересечений, тем темнее область. Это на самом деле довольно нетребовательный метод потому что лучи нужно проверять только для локальных объектов, а их деревья BVH намного меньше.
Группа EA SEED создала демо Pica Pica с использованием DXR (DirectX Ray Tracing), где в определенный момент демонстрируется разницу между SSAO (ambient occlusion пространства экрана, наиболее распространенное решение до RT) и RTAO (ambient occlusion при помощи трассировки лучей). Дело больше не в том, что SSAO выглядит плохо, а в том, что RTAO выглядит значительно лучше.
Каустика
Каустика – это результат отражения или преломления света от изогнутых поверхностей. Представьте мерцающие волны на воде в яркий день или узоры света на столе от солнечных лучей, проходящих сквозь стакан с водой. RTX демо китайской ММО Justice наглядно демонстрирует эффект каустики в отражениях на поверхности воды.
Каустика рассчитывается аналогично стандартным отражениям, созданным при помощи трассировки лучей. Создаются лучи, после чего отмечаются места, где они взаимодействуют с поверхностью, а затем соответственно рисуются отражения и преломления. Следом каустики накапливаются в буфере пространства экрана и размываются/удаляется шум, уже после чего наконец объединяются с освещением сцены. В то время как каустики поверхности не слишком требовательны, объемные каустики, например, когда солнечный свет отражается от поверхности воды в глубь, а затем отражается или преломляется частичками ила или других объектов, могут быть более ресурсозатратны.
Глобальное освещение
Это наиболее требовательный метод трассировки лучей. Глобальное освещение отбрасывает и динамически обновляет лучи на каждый базовый пиксель по всей сцене, чтобы учесть даже незначительные изменения освещения. Несмотря на то, что название данного метода может заставить вас думать о чем-то близком к теням, глобальное освещение на самом деле больше касается непрямого освещения.
Представьте себе темную комнату с приоткрытым окном. Это окно не только создает небольшой прямоугольник света на полу и стене – свет отражается от поверхностей, и вся комната становится ярче. Глобальное освещение испускает сложную сеть лучей, отражая их внутри сцены и создавая дополнительные лучи, чтобы помочь осветить сцену.
Чем на самом деле плох Epic Games Store
В Metro Exodus используется глобальное освещение при помощи трассировки лучей, поэтому разница в производительности может быть существенной. В зависимости от сцены, эффект может быть довольно заметным (например, в слабо освещенной комнате с окном), в то время как в других сценах (например, снаружи поезда) он слабо различим. Однако даже когда это не обязательно эффект меняет внешний вид сцены. Глобальное освещение обычно требует бОльших вычислительных ресурсов, чем отражения, используемые в Battlefield 5 или сложные тени в Tomb Raider.
Даже без трассировки лучей, Metro Exodus может сильно нагрузить ваш ПК. Однако именно благодаря трассировке лучей Metro становится современным Crysis с точки зрения визуальной точности и новым титаном, при помощи которого измеряется производительность новых графических адаптеров.
Использование шумоподавления и искусственного интеллекта для улучшения производительности
Если вы посмотрите на указанные выше примеры использования трассировки лучей в играх, то можете заметить, что большинство игр в настоящее время реализуют только один или два эффекта трассировки лучей. У BF5 есть отражения, у SotTR есть тени, а у Metro глобальное освещение. В идеальном мире, где игры используют полную трассировку лучей, мы бы хотели получить все эти эффекты и даже больше! Однако такое вряд ли возможно для современных видеокарт, по крайней мере, если вы надеетесь получить приемлемую частоту кадров.
Вместе с тем существуют некоторые способы уменьшить сложность вычислений. Один простой подход состоит в том, чтобы определить меньшее количество пикселей при помощи трассировки лучей. Это можно сделать одним из двух способов. Алгоритм Nvidia DLSS позволяет игре, в которой реализована технология RT, рендерить картинку при более низком разрешении, а затем с помощью ИИ масштабировать ее удаляя неровности. Результат не будет идеальным, но он может быть достаточно близок, к тому чтобы не замечать недостатки.
Еще один способ уменьшить количество лучей позволяет не снижать разрешение. Такая техника называется шумоподавлением (denoising) и ее основная идея состоит в том, чтобы отбрасывать меньше лучей, а затем использовать алгоритмы машинного обучения для заполнения пробелов. Шумоподавление уже становится основой высококачественной трассировки лучей в фильмах, а Pixar и прочие компании уже используют эту технику с пользой. Nvidia также провела много исследований в области шумоподавления и хотя не совсем ясно, как именно эта техника применяется в играх, вероятно у данного метода есть большой неиспользованный потенциал.
Будущее Ray Tracing
Крупные компании уже присоединились к работе над трассировкой лучей, включая Epic Games со своим Unreal Engine, Unity 3D и EA с Frostbite. Microsoft объединилась с производителями оборудования и разработчиками программного обеспечения для создания совершенно нового API DirectX Ray Tracing (DXR), основанного на существующей платформе DX12. Трассировка лучей в реальном времени в той или иной форме всегда была целью компьютерной графики, и теперь мы существенно приблизились к этому.
В то время как графические процессоры Nvidia серии RTX 20 являются первой реализацией выделенного ускорения трассировки лучей в потребительском оборудовании, будущие графические процессоры, вероятно смогут заметно увеличить скорость расчета трассировки лучей. Сейчас невозможно сказать, как далеко это зайдет.
Достаточно взглянуть на последнее десятилетие развития графических процессоров. Первым ГПУ Nvidia с ядрами CUDA была карта 8800 GTX со 128 ядрами CUDA, которая появилась еще в конце 2006 года. 13 лет спустя видеокарты оснащаются почти в 40 раз большим количеством ядер CUDA и каждое ядро стало значительно более производительным.
Сегодня на RTX 2080 Ti полная трассировка лучей в режиме реального времени для каждого пикселя не очень практична, но индустрия уже много лет движется в этом направлении. Будут ли у нас в 2030 году графические процессоры с тысячами ядер трассировки лучей? Вероятно, да.
Видеокарты AMD Navi засветились в бенчмарках
Все разговоры о том, что трассировка лучей является будущим графического рендеринга, могут показаться чрезмерными, когда вы думаете об этом с точки зрения простых теней и отражений. Однако реальность такова, что точное моделирование света является основой для имитации реального мира. Наше восприятие полностью формируется светом от самого простого уровня определения того, сколько и какие части нашего окружения видимы, вплоть до тончайших деталей цветов и оттенков, которые способен воспринимать человеческий глаз.
Не забудьте подписаться и поставить лайк. Впереди будет еще много крутых статей.