Как быстрый современный процессор помогает в играх с трассировкой лучей rtx

Обновлено: 07.07.2024

Освободи Себя оказание метод, обычно используемый в видеоиграх, - это так называемый растеризации or алгоритм художника . Но с приходом Ray Tracing or Ray Tracing в реальном времени мы приближаемся к эпохе полного преодоления старых ограничений. С приходом AMD«s РДНК 2 и консолей нового поколения, ясно, что мы не сталкиваемся с преходящим увлечением, и поэтому мы объясняем преимущества этого нового способа рендеринга сцены.

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

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

Трассировка лучей 2023

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

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

Растеризованные и трассировка лучей

Recorrido Luz с трассировкой лучей

При растеризации мы обновляем значение цвета пикселя на экране, а затем снова обновляем этот пиксель; это означает, что один пиксель должен обновляться несколько раз в одной сцене.

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

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

Конвейер гибридной трассировки лучей

Трубопровод трассировки лучей Vulkan DX12U

Независимо от того, используем ли мы Vulkan, DirectX 12 Ultimate или любой другой тип API, этапы и порядок их выполнения всегда одинаковы.

  • Шейдер Ray Generation: этот шейдер необходимо вызывать каждый раз, когда мы хотим, чтобы объект в сцене испускал тип луча.
  • Шейдер пересечения: это - это шейдер, который вычисляет пересечение лучей и объекта, не рекомендуется из-за того, что блоки пересечения, такие как NVIDIA RT Core, выполняют эту работу параллельно и более эффективно.
  • Разрешение шейдеров: они - это тип программы шейдера, которая применяется к объекту в зависимости от результата пересечения, они называются шейдером промаха, шейдером ближайшего попадания, шейдером попадания и т. д. Они не все выполняются одновременно, поскольку пересечение дает один результат.

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

Непрямое освещение, большое преимущество трассировки лучей

Растр против трассировки лучей

Несмотря на постоянное улучшение GPU / ГРАФИЧЕСКИЙ ПРОЦЕССОР мощность и программируемость за последние два десятилетия, все они используют один и тот же алгоритм для рендеринга сцен сцены, называемый алгоритмом растеризации.

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

С другой стороны, трассировка лучей имеет дело с траекторией световых лучей в сцене и учитывает их поведение и траекторию.

Под непрямым освещением мы понимаем то, что создается объектом, когда на него падает прямой источник света. ".

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

Карты теней, пример ограничений растеризации

Растровые ужасные карты теней

Более чем однажды, играя в видеоигры, вам захочется оторвать глаза из-за теней в игре; Причина в том, что графическому процессору приходится проделывать дополнительную работу, чтобы получить представление о том, какими будут тени из-за отсутствия информации.

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

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

Одна из вещей, которые решаются с помощью трассировки лучей, - это карты теней, и не только они, но и отражения объектов, преломление и т. Д.

Трассировка лучей Battlefield V

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

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

Еще одно преимущество: представление материалов

Luz en materiales

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

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

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

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

Линейку NVIDIA RTX во время релиза не пнул только ленивый. «Лучи не нужны», «всё это для дураков с деньгами», «нет контента», — говорили скептики. Окей, для особо осторожных выпустили компромиссную GTX 1660 Ti — мы её уже тестируем и скоро выскажемся по теме. А как обстоят дела у технологии RTX сейчас? Подъехали патчи и улучшения, но изменилась ли картина?

NVIDIA

Новые возможности NVIDIA Turing

Прошлое поколение GPU — с кодовым именем Pascal — продержалось на рынке два года. И до сих не утратило популярность — спасибо качественным улучшениям в микроархитектуре самого ускорителя. С новым Turing история во многом схожа. В прошлом, с 700-й по 900-ю серию, NVIDIA больше «полировала» проверенный временем дизайн. При переходе к 10-й, а затем и 20-й линейке видеокарт последовательно менялось внутреннее устройство графического процессора. Разумеется, не забавы ради, а чтобы адаптировать аппаратные возможности к запросам современного геймдева.

Помимо роста вычислительных мощностей GPU, появились три уникальные технологии, недоступные старым видеокартам.

1. Ray Tracing, она же RTX, или DXR

Трассировка лучей в реальном времени. Священный грааль графической индустрии: технология, позволяющая максимально реалистично обсчитывать освещение и отражения. Основных преимуществ два. С толково реализованным рейтрейсингом тени в играх выглядят лучше и правильнее (почти все «костыли» можно заменить на честный Global Illumination). А на зеркальных поверхностях появляются геометрически достоверные отражения даже тех объектов, которых нет в кадре.

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

Чтобы всё это работало без тормозов, нынешним видеокартам требуются специальные вычислительные блоки. Классическими шейдерными процессорами можно провести те же операции и получить картинку не хуже. Но результат не будет быстрым — из-за огромного числа операций для каждой точки изображения. RT-ядра содержат аппаратный блок проверки пересечений моделей и столкновений луча с поверхностью. Его вычисления ложатся в основу расчётов уже на «обычных» ядрах, — только теперь видеокарта знает, от каких фрагментов изображения будет зависеть цвет в конкретной точке.

2. Deep Learning Super Sampling (DLSS), она же «AI-сглаживание»

У этой технологии два режима работы: условные «качество» и «производительность». Сейчас разработчики в основном используют второй. Если отбросить маркетинговые россказни и говорить простыми словами, DLSS в режиме производительности включает рендер в пониженном разрешении — например, 1440p вместо 2160р. А затем использует нейросети для апскейла картинки. Так что это скорее не сглаживание как таковое, а попытка «дотянуться до 4K» малой кровью.

«Из коробки» технология не работает — нужен патч для каждого тайтла.

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

NVIDIA

Для запуска DLSS на видеокарте требуется аппаратный блок ускорения нейросетей. В моделях NVIDIA за это отвечают тензорные ядра. Они занимаются простыми и не очень точными вычислениями, зато делают их быстро. Так формируется нейронный отклик на определённую ситуацию. «Обученная» на серверах NVIDIA нейросеть загружается в них при запуске игры и помогает алгоритмам лучше восстанавливать качество картинки.

3. Variable Rate Shading (VRS)

Ещё одна «обманка», призванная сократить потребление ресурсов там, где это технически оправдано. Помните поговорку «Темнота — друг молодёжи, в темноте не видно рожи»? Так вот, VRS — это программно-аппаратное воплощение этой фразы. Изображение бьётся на сегменты 16x16 пикселей, анализируется и группируется в массивы. В зависимости от количества спецэффектов, яркости зоны и её важности для геймера видеокарта решает: здесь нужно считать освещение для любой точки по-честному, тут — для каждых двух, а вон там и вовсе для целого кластера из четырёх пикселей.

То есть GPU не занимается ресурсоёмкими вычислениями там, где к изображению будут применены Motion Blur, густой туман или глубокое затенение.

Звучит разумно? Несомненно. Вопрос лишь в том, насколько пострадает качество итоговой картинки и будет ли оно резать глаз.

Казалось бы, подобную оптимизацию можно реализовать простым обновлением драйвера. Однако неизвестно, насколько технология подвязана на аппаратные возможности Turing. Чем руководствовалась NVIDIA, ограничивая поддержку VRS только новыми карточками, мы тоже не знаем. Дело в жадности или разумных аргументах?

Само не заведётся

Всё это — именно что возможности, а не режим работы видеокарты по умолчанию. Для поддержки DRX, VRS и DLSS авторам каждой конкретной игры необходимо адаптировать эти технологии к своим движкам и ресурсам. Причём крайне желательно не просто прикручивать что-то в последний момент (привет, Metro Exodus), а закладывать это на раннем этапе производства (как в случае с Battlefield V).

Но сперва давайте определимся, о каких видеокартах речь. С наименованием Turing вышел конфуз: топовые модели получили революционные изменения во внутреннем устройстве GPU и закономерно относятся к линейке RTX 20. Более доступные решения лишены блока трассировки и ядер для машинного обучения, зовутся GTX и пока представлены моделями 1660 и 1660 Ti. Не исключено, что позже появится ещё более бюджетная 1550.

Все вышеописанные фишки сегодня доступны лишь на видеокартах RTX 20-й серии.

Конфигурация демостенда

ПРОЦЕССОР Intel Core i7-7820X 8 ядер @ 4,6 ГГц МАТЕРИНСКАЯ ПЛАТА ASUS STRIX X299E-Gaming ОПЕРАТИВНАЯ ПАМЯТЬ 64 ГБ DDR4 GeIL Evo-X RoG Certified 8x8 Гб, 3200 МГц ВИДЕОКАРТА Palit GeForce RTX 2070 GameRock НАКОПИТЕЛЬ Intel P760 NVMe SSD КОРПУС Cooler Master Cosmos II ПИТАНИЕ BeQuiet! DarkPower Pro 11 850W ДИСПЛЕЙ AOC Agon ag322qc4 32 дюйма, 2560x1440, 144 Гц, HDR400

Мы специально взяли «среднюю» карточку — RTX 2070. Хотелось посмотреть, как с новомодными графическими технологиями справляется железо, которое по карману большинству геймеров.

DirectX Ray Tracing

Самая сложная из технологий, но и самая наглядная. Реализация трассированного освещения напрямую зависит от того, как авторы ААА-хитов применяют RT-ядра и насколько глубоко внедрили новые алгоритмы в графический пайплайн. Сама NVIDIA предлагает множество вариантов взаимодействия классических методов отрисовки 3D-изображения с прогрессивными.

Battlefield V

В детище DICE и EA трассировка работает на полную: гифкой можно любоваться бесконечно долго, подмечая новые детали. Отражение в стёклах трамвая, рассеивание света на горизонте, правильное самозатенение и поведение материалов. Красота!

Metro Exodus


Сложно догадаться, включена трассировка или нет. Но если сравнить со следующим кадром — всё станет ясно


Посмотрите на тени по краям изображения — они насыщенные и глубокие. На предыдущем скриншоте в этих местах были непонятные засветы. Вот оно — честное освещение. Со следующими кадрами сами разберётесь?



Shadow of the Tomb Raider

Помимо классических улучшений в духе «картинка помягче, свет получше, честные отражения», создатели Shadow of the Tomb Raider применили трассировку для одной из сложнейших операций — расчёта динамических теней для подвижных точечных источников освещения. Лучше всего это заметно в ролике выше. Но так ли необходимы Ларе Крофт подобные украшательства? Зависит от сцены. Правильно выстроенный свет задаёт атмосферу. К сожалению, построить геймплей на прятках в таких тенях пока невозможно: слишком малый процент проникновения технологии.

Понять принцип действия DLSS сложно. Во-первых, у него два разных алгоритма работы (но нас интересует тот, что повышает производительность). Во-вторых, это не замена классическому MSAA. Мультисэмплинг применяется в первую очередь для улучшения качества, большей гладкости и чёткости картинки за счёт применения дополнительных, то есть сверх необходимого, ресурсов. Deep Learning Super Sampling — наоборот, про достижение «обычного» результата малой кровью. В-третьих, DLSS надо «учить» каждой новой игре.

Как это делается, зачем, насколько качественно — всё это своеобразный чёрный ящик. Мы можем лишь наблюдать результат на экране.

Battlefield V


Тот случай, когда DLSS применён по делу и качественно. Здесь он активирован


Metro Exodus


Metro Exodus использует DLSS в режиме «улучшения производительности». Увеличения fps в таких условиях мы не увидели



На тёмных локациях fps действительно растёт, но ценой некрасивых артефактов.


Просто посмотрите на искры от выстрелов. А ведь они перед глазами постоянно!

В реальных случаях счётчик fps при этом не особо вырос — и вот почему. Работа Deep Learning Super Sampling сопряжена с загрузкой тензорных ядер, которых в текущих моделях NVIDIA Turing не сказать, что много. Поэтому NVIDIA ограничила применение DLSS, и выставила ограничения: в какой конфигурации его можно включать, а в какой нет — так работа DLSS перестаёт быть «бутылочным горлышком», производительность ограничена уже общими возможностями видеокарты. Проще говоря, AI-апскейлинг нужно включать, когда GPU забит задачами под завязку и фреймрейт падает ниже комфортных величин. Ещё бы он автоматически отключался, когда fps выше 60.

Port Royale Benchmark


Бенчмарк Port Royale был создан NVIDIA и 3DMark для тестирования рейтрейсинга. Он же поддерживает DLSS, причём в наиболее интересном варианте: с акцентом на качество картинки


fps по сравнению с TAA-версией (прошлый кадр) упал, но посмотрите на чёткость и проработку деталей! Следующие два слайда в комментариях не нуждаются



Если применять Deep Learning Super Sampling в режиме улучшения качества картинки, ни о каком улучшении производительности говорить не приходится. TAA-алгоритм отрабатывает с большим числом артефактов, зато намного шустрее. При этом, что немаловажно, мы смотрим вырванный из видеопотока фрагмент. Разумеется, при 48 fps все огрехи изображения гораздо заметнее, чем небольшие артефакты от кадра к кадру при 80 fps. Иными словами, преимущества DLSS над обычными алгоритмами определённо есть. Однако правильно пользоваться технологией геймдеву ещё учиться и учиться.

В целом DLSS создавалась как технология поддержки. В NVIDIA понимали, что первое время у младших «Тьюрингов» (RTX 2060 и 2070) будут проблемы с трассировкой. Но не пускать технологию в массы — это равносильно её смерти. Ускорение вычислений за счёт незначительного ухудшения качества — терпимый компромисс. Главное — не включать DLSS в разрешении ниже, чем 2560x1440. А в Metro Exodus про неё лучше вообще забыть.

Адекватно оценить Variable Rate Shading сложно — на скриншотах разницы практически нет, ведь в статичных сценах VRS не применяется. Лучше всего смотреть лично, на хорошем дисплее, в экшене с кучей ярких сцен. Например, запустив Wolfenstein II: The New Colossus — тут фишку добавили патчем. В ролике ниже — авторы боевика вместе с экспертами Digital Foundry демонстрируют, как меняется картинка с этой технологией:

Сама идея не нова, в той или иной степени её применяли и до NVIDIA. Ещё первая Crysis использовала разное количество вычислений для объектов с Motion Blur. При аккуратной работе и грамотной настройке VRS экономит ресурсы ПК при построении сложных сцен — а геймерам только того и надо: меньше тормозов, больше красоты на дисплее.

Скрипач не нужен

Ну что, есть ощущение некстгена от всех этих штук? Чувствуете, как всё в корне изменилось? Не очень? Это закономерно. Прогресс замедлился — каждый следующий шаг к фотореализму даётся всё труднее. И дело не в дороговизне инноваций. Просто чем круче и сложнее технология, тем дольше ААА-студии учатся ею пользоваться.

Syndicate (2012)

Syndicate (2012). Безусловно, модный в то время Bloom — часть эстетики Syndicate, но в некоторых сценах его слишком много. Со временем и этот спецэффект научились применять аккуратно

При каждом серьёзном графическом рывке индустрия несколько лет к нему адаптируется. Надо не только переписать движки, научить их новым трюкам, но и кропотливо трудиться над игровыми ассетами, оптимизацией и финальной картинкой. Поэтому отсутствие массового прорыва в первый год — закономерность. Единичные хиты потихоньку тянут прогресс на себе. Вспомните ту же Crysis с DirectX 10.

Кроме того, пользовательский опыт не должен разительно отличаться для владельца GTX 1080 Ti и условной RTX 2060. Поэтому разработчикам приходится делать так, чтобы их релиз выглядел круто и на прошлогодней карте за 800 баксов, и на свежей «бюджетке» за $300. Всё это требует удвоенных затрат финансов и времени на оптимизацию.

Забавно, что вопли в духе «лучи не нужны» слышны не первый год. Помните переход от девятого DirectX к десятому, унифицированной шейдерной архитектуре и всему тому, что нынче считается мейнстримом?

Тогда владельцы видеокарт, устаревших в один день, тоже кричали, что всё это маркетинговые уловки, а для гейминга хватит и Windows XP. Однако Xbox 360 и Crysis доказали миру, что за новой архитектурой — будущее. И ничего, живём, радуемся красивой картинке. Пару лет назад каждый кадр следующего видео обсчитывался бы по несколько минут.

То же самое и сейчас. Можно предположить, что авторы Battlefield V и Shadow of the Tomb Raider сотрудничали с NVIDIA на этапе проектирования самой технологии. Отсюда и тесная интеграция трассировки в их графический пайплайн, работа на 100% и приятный глазу результат, пусть и не очень заметный по сравнению с настройками на «ультре».

В Metro Exodus заметно, что прикручивали рейтрейсинг в последний момент. Да, в отдельных сценах RTX On выглядит лучше, чем RTX Off. Но вот трассированных отражений нет нигде, да и эффект трассировки попадается на глаза куда реже, чем в играх ЕА и Square Enix.

NVIDIA

Массовое применение DLSS пока под вопросом. Сегодня результат по большей части неудовлетворительный и неизвестно, появится ли аналог у AMD.

С надеждой на светлое будущее

До полноценного принятия Ray Tracing пройдут годы, однако это трудный и болезненный шаг, который нужно было сделать. Смелость NVIDIA достойна уважения. Посмотрим, что предложит архитектура AMD Navi — она дебютирует на консолях Microsoft и Sony следующего поколения. От этого зависит, что войдёт в мейнстрим, а что останется уделом ПК-энтузиастов ещё на несколько лет. Как минимум до Pro-версий грядущих приставок.


Чип Apple M1, установленный в новых MacBook Air, MacBook Pro и Mac Mini, уже стал предметом множества обсуждений, статей о бенчмарках и публикаций в блогах. Скорость и производительность его действительно впечатляют, особенно касаемо производительности на ватт.

Но конкретно сейчас мы остановимся подробнее на трассировке лучей — в частности, на трассировке лучей через API Metal, анонсированный на WWDC-2020.

Для тестов в данной статье использовались Mac Mini и интерактивный трассировщик пути ChameleonRT, а сравнение проводилось с DirectX, Vulkan, OptiX и Embree.

Подробнее о ChameleonRT

ChameleonRT — интерактивный трассировщик пути с открытым исходным кодом, созданный для изучения различных API трассировки лучей. Он предоставляет бэкэнд для таких API, как DirectX Ray Tracing, Vulkan KHR Ray Tracing и OptiX 7, а теперь и Metal. Также он поддерживает бэкэнд Embree для быстрой многопоточной и ускоренной с помощью SIMD трассировки лучей на ЦП через Embree, ISPC и TBB. Код рендеринга в каждом случае практически идентичен. На выходе получаются пиксельные данные с возможными небольшими различиями, связанными с различиями в библиотеках трассировки лучей и языках шейдеров.

ChameleonRT отличается от популярных приложений для тестирования трассировки лучей, таких как CineBench, LuxMark и Blender Benchmark. Он представляет собой минимально необходимый для тестирования интерактивный трассировщик путей. CineBench, LuxMark и Blender Benchmark отлично подходят для получения полного представления о том, какую производительность ожидать от производственного рендерера. Однако в производственном рендерере происходит гораздо больше, чем просто трассировка лучей: в нем заложена поддержка сложной геометрии, материалов и эффектов, используемых в фильмах, а масштабные кодовые базы сложно переносятся на новую архитектуру или API.

ChameleonRT — их полная противоположность, поддерживающая только один тип геометрии — треугольные мэши — и один тип материала – Disney BRDF. Остальной код написан в целом аналогично другим бенчмаркам для достижения производительной интерактивной трассировки пути, но в то же время так, чтобы его было довольно просто читать. Например, рендереры здесь используют итеративную трассировку лучей вместо рекурсивной, а также только простую стратегию сэмплинга, и не поддерживают эффекты cutout. Использование итеративной трассировки лучей полезно как для ЦП, так и для ГП, хотя для последнего особенно важно — ведь нагрузки при вызове программной рекурсивной трассировки лучей могут существенно повлиять на производительность. Точно так же игнорирование cutout эффектов позволяет рендерерам ГП пропускать использование hit-шейдеров. Они будут вызваны уже во время обхода BVH после нахождения пересечения с треугольником. Аппаратное ускорение обхода BVH приводит к возникновению большого количества возвратов между фиксированной функцией обхода BVH и ядрами для запуска hit-шейдера, что ограничивает производительность оборудования.

Что такое трассировщик пути? Трассировка путиэто метод рендеринга фотореалистичных изображений путем симуляции переноса света в сцене. Это метод Монте-Карло, случайным образом выбирающий пути прохождения света, попадающего в камеру, отражаясь от объектов в сцене. Он реализуется посредством отслеживания пути в направлении от камеры обратно через всю сцену. Для получения изображения без шума необходимо выполнить сэмплинг большого количества световых путей. Трассировка пути не ограничивается применением только в фотореалистичный изображениях. Она также широко используется в кинорендерерах, таких как Renderman от Pixar, Hyperion от Disney, Arnold от Autodesk и Manuka от Weta.

Трассировка лучей на ГП через Metal

Трассировка лучей в новом Metal API похожа на встроенную трассировку лучей в DirectX или Vulkan. Чтобы узнать подробнее, что представляет из себя Metal, можно посмотреть видео с WWDC 2020 и ознакомиться с этим кодом. Встроенная поддержка трассировки лучей позволяет приложениям выполнять вызовы трассировки лучей в шейдерах на любом этапе — например, в шейдерах фрагментов/пикселей, вершинных шейдерах, вычислительных шейдерах и т. д. Также она позволяет включать эффекты трассировки лучей — например, точные отражения и тени — в стандартный пайплайн растеризации. Ее можно использовать в вычислительном шейдере для реализации автономного рендерера на основе трассировки пути. ChameleonRT — автономный трассировщик путей, использующий подход вычислительных шейдеров для Metal.

Трассировка лучей в Metal выполняется следующим образом: вы загружаете свою геометрию, строите над ней примитивные структуры ускорения нижнего уровня, затем создаете инстансы, ссылающиеся на эти структуры, и строите структуру ускорения верхнего уровня поверх этих инстансов. Для рендеринга сцены нужно запустить вычислительный шейдер и непосредственно рейкасты в структуру ускорения верхнего уровня, чтобы получить возвраты от ее пересечений с лучами. Результаты пересечения несут данные о пересекающихся примитивах и геометрии, а при использовании инстансов — и об инстансах. Затем ваш шейдер ищет геометрические данные об объекте, в который попал рейкаст, и закрашивает его, после чего можно продолжить процесс трассировки пути.

В настоящее время Metal поддерживает только встроенную трассировку лучей, в отличие от DirectX и Vulkan, которые также обеспечивают поддержку программной трассировки. Она, в свою очередь, используется для реализации автономных средств рендеринга трассировки лучей — именно этот подход ChameleonRT использует в DirectX и Vulkan. OptiX поддерживает только программную трассировку лучей, что требует создания таблицы привязки шейдеров (Shader Binding Table, SBT) для предоставления API таблицы функций, вызываемых при пересечении определенных объектов в сцене. SBT трудно настраивать и отлаживать, однако их потенциальное преимущество в том, что так графический процессор получает возможность переупорядочивать и группировать вызовы функций для уменьшения расхождения потоков. При встроенной трассировке лучей разработчику необходимо произвести все это вручную или вовсе от этого отказаться (подробнее см. другое видео с WWDC20).

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

Трассировка лучей в Metal во многом похожа на другие API, но оптимизирована для более простого использования. Например, для сравнения приведем код, необходимый для сборки и сжатия BVH в DirectX или Vulkan и Metal. API OptiX обеспечивает аналогичное упрощение — вот ссылка на сборку BVH в OptiX в качестве примера. Также приятным бонусом идет возможность иметь шаблоны и функциональные возможности стилей C++ в языке шейдеров — это функция Metal, использующая CUDA для кода на стороне устройства.

Однако в этой простоте есть и свои недостатки. Например, в то время как в DirectX, Vulkan и OptiX вы можете контролировать, где выделяется память для структуры ускорения, Metal вам не оставляет никакого выбора. В результате вы не можете выделить структуры ускорения в MTLHeap и поэтому, чтобы убедиться, что они доступны для вашего пайплайна рендеринга, вы должны сами пометить их как используемые в цикле — вместо простого вызова useHeap.

// Использование структуры ускорение верхнего уровня

// Помечаем все структуры ускорения мэшей как используемые

for (auto &mesh : bvh->meshes)

[command_encoder useResource:mesh->bvh usage:MTLResourceUsageRead];

Если у вас много BVH нижнего уровня, как это бывает в сценах с большим количеством инстансов, могут возникнуть дополнительные нагрузки. Было бы неплохо иметь возможность выделить структуры ускорения в куче и заменить этот цикл одним [commandencoder useHeap: dataheap-> heap];

Этот API также значительно упрощается за счет того, что он не включает программную трассировку лучей и требует только структуру в виде таблицы привязки шейдеров при реализации настраиваемых геометрий или других операций, которые должны выполняться во время обхода (например, cutout). Код для управления настройкой SBT в DirectX, Vulkan и OptiX составляет значительную часть вспомогательного кода в бэкэнде для каждого API, и хорошо, что этого нет в Metal, не работающем с настраиваемой геометрией или cutout текстурами. Однако в модели SBT графический процессор может группировать или переупорядочивать вызовы функций, но это меньше касается встроенной трассировки лучей, в случае которой такая информация недоступна для драйвера. Действительно ли текущие драйверы для DirectX, Vulkan и OptiX на это способны – вопрос к разработчикам, но теоретически это возможно. В конце концов, вы можете обнаружить, что реализуете что-то вроде более простого аналога SBT для поиска необходимых данных о примитивах/мэшах/инстансах в вашей сцене в буферах аргументов, как это реализовано в ChameleonRT. Тогда же вам необходимо реализовать операции, происходящие во время обхода (настраиваемая геометрия, прозрачность cutout).

Быстрая трассировка лучей на ЦП с библиотеками Intel

В результатах CineBench от AnandTech можно заметить, что CineBench использует Embree — библиотеку трассировки лучей на ЦП от Intel, обеспечивающую оптимизированный обход структуры ускорения и ядер пересечения примитивов, оказывая такую ​​же нагрузку на ЦП, что и новые API трассировки лучей на ГП. Embree была выпущена в 2011 году и с тех пор нашла широкое применение в кино, науке и других сферах.

ChameleonRT также поддерживает бэкэнд Embree, использующий Embree для быстрого обхода лучей и пересечения примитивов, ISPC — для программирования SIMD и TBB — для многопоточности. На самом деле, запустить его на M1 Arm довольно просто. Существует AArch64/NEON порт Embree — Embree-aarch64, — недавно получивший обновления от команды Apple с целью добавления AVX2 в бэкэнд NEON. Embree в значительной степени оптимизирован для ширины SIMD, равной 8, поэтому, даже несмотря на то, что в данном случае нужно использовать 2 вектора NEON, чтобы он действовал как один вектор AVX2, так можно обеспечить лучшую производительность, чем бэкэнд шириной 4 на NEON.

ISPC — компилятор для программирования SIMD на ЦП, в котором пишутся скалярные программы, компилирующиеся для параллельной работы — по одному экземпляру программы на векторную дорожку. Каждая программа обрабатывает свои фрагменты данных параллельно с другими программами. Это что-то вроде GLSL или HLSL, работающих на ЦП, где скалярная программа выполняется параллельно с использованием SIMD. ОднакоISPC уже поддерживает NEON и AArch64, так что включение в него комбинации macOS+AArch64/NEON оказалось довольно простым. Для этого можно использовать такой PR.

Наконец, хотя TBB — библиотека Intel для многопоточности, она не имеет никакого отношения к конкретной архитектуре ЦП. Все, что нам нужно, — это собрать TBB для AArch64.

Бенчмарки

Теперь, когда ChameleonRT работает на ЦП и ГП чипа M1, можно провести несколько тестов. Для сравнения аналогичные тесты были проведены на i7-1165G7 в XPS 13 (тут стоит заметить, что у него могут возникнуть проблемы с нагреванием), на i7-4790K и на i9-9920X на Ubuntu. Что касается ГП, для сравнения был взят RTX 2070. Непосредственно M1 использовался с 16 ГБ оперативной памяти Mac Mini.

Трассировка лучей. Современные возможности видеокарт

Технология построения реалистичных сцен методом трассировки лучей (ray tracing) известна уже несколько десятков лет, но только пару последних лет она полноправно заявляет свои права в сфере компьютерных игр. Тем самым переставая быть инструментом, применяемым сугубо в профессиональной сфере, постепенно становясь ближе простому обывателю.

Виртуальные фотоны

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


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


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

Такое сходство рейтрейсинга с процессами, происходящими в реальном мире, делает его довольно успешной техникой 3D-рендеринга. Даже в «кубических» играх наподобие Minecraft, картинка выглядит довольно реалистично, насколько это конечно возможно.


Основная проблема — такая насыщенная среда довольно сложно поддается моделированию. Воссоздание процессов работы света в реальном мире — очень сложный и требовательный к вычислительным ресурсам процесс. Для примера, при расчете одного кадра с разрешением Full HD потребуется одновременно просчитать 2073600 виртуальных лучей, каждый их которых, прежде чем сформирует один пиксель на экране, по пути следования будет взаимодействовать не с одним десятком своих «сородичей». При этом не стоит забывать, что речь идет о динамичной сцене, а не о статичной картинке, поэтому количество вычислений, при комфортном значении FPS, как правило, составляющих 50–60 FPS, возрастает в разы! Понимание этого процесса объясняет наличие огромных серверных ферм для рендеринга на киностудиях и студиях визуализации, профессионально занимающихся созданием контента высокого качества.

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


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


Трассировка лучей в игровом контенте

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

Чтобы сделать рейтрейсинг ближе к народу, производители контента вынуждены идти на определенные компромиссы. Ведь кроме увлекательного сюжета и удобного геймплея, у игры должна быть отменная визуализация, которая полностью погрузит геймера в игровой процесс. Это достигается определенными «уловками» в сфере создания отражений, теней и реалистичного распределения света по игровой сцене.

Отражения

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

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


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

Battlefield V — яркий представитель такого игрового контента. Пользователь во всей красе наблюдает отражения войск и техники на воде, отражение местности на плоскостях пролетающих самолетов, ​​отражение вспышек от взрывов на поверхностях игрового мира.


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

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


Наиболее интересно реализовать динамику и реализм теней на данный момент удалось разработчикам компьютерной игры Shadow of the Tomb Raider.


Освещенность

Если, что называется «по-честному», просчитывать всю освещенность сцены, то необходимо учитывать абсолютно все световые лучи присутствующие в ней. А это очень и очень ресурсоемкая задача!


Поэтому для трассировки лучей в играх, во-первых, используется определенное количество источников света, а во-вторых, количество итераций рейтрейсинга тоже строго ограничено. Этот трюк позволяет сделать картинку живой и реалистичной, но в то же время не перегружает графическую подсистему ПК.

Пока еще в редких играх используется полная трассировка лучей для просчета глобального освещения всей сцены. Это самый дорогой в вычислительном отношении способ. Для эффективной работы он нуждается в самой мощной из доступных в данный момент видеокарт. А вот результат вполне может разочаровать, поскольку топовая видеокарта справится с такой задачей в разрешении Full HD, хотя ей вполне по силам без использования рейтрейсинга выводить на экраны изображение 4К. Metro Exodus — пожалуй, единственная игрушка, использующая трассировку лучей для построения всей сцены, хотя в некоторых моментах ее реализация оставляет желать лучшего.

Аппаратная часть

Наиболее удачливой в коммерческом использовании технологии оказалась компания NVIDIA. Ее серия графических адаптеров GeForce RTX — безоговорочный лидер в работе с виртуальными фотонами. Ведь она была специально разработана для решения задач по трассировке лучей.

Компания AMD на данном этапе сохраняет завидное олимпийское спокойствие. Однако это затишье не должно расслаблять конкурентов. Скорее всего, в самом ближайшем будущем, игроманам будет презентована специализированная линейка видеоадаптеров на базе архитектуры RDNA 2, презентованной ранее.

Краткие итоги

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

Читайте также: