Шейдеры обхода, что это такое и какие приложения есть на GPU

Шейдеры обхода

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

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

Прежде всего, давайте вспомним, что такое шейдер

Ejemplo функциональный шейдер

В программном обеспечении мы в просторечии называем шейдером программу, работающую на ядрах GPU / ГРАФИЧЕСКИЙ ПРОЦЕССОР, которые имеют разные названия в зависимости от производителя. Так AMD называет эти аппаратные части компьютерными модулями в своей Radeon, NVIDIA называет их Stream Multiprocessors или SM в своей GeForce и Intel дает им в своих названиях ARC эти блоки Xe Core.

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

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

Microsoft, DirectX Ray Tracing и шейдеры

Трассировка лучей Microsoft DirectX 12

Когда Редмонд впервые рассказал о внедрении трассировки лучей на конференции разработчиков игр в 2018 году, до запуска NVIDIA RTX 20 оставалось несколько месяцев, и в то время было совершенно неизвестно, по крайней мере, публично, есть устройства для ускорения. Трассировка лучей, такая как NVIDIA RT Cores и AMD Ray Acceleration Units.

Что было Microsoftесть предложение расширить свой мультимедийный API? Что ж, добавьте ряд дополнительных этапов, которые определены на следующей диаграмме:

Этапас DXR

Понять схему легко:

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

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

Структуры данных для ускорения трассировки лучей

Арбол БВХ

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

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

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

Шейдеры обхода, что это такое и каково их происхождение?

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

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

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

Шейдеры обхода для построения пространственной структуры данных

Шейдеры обхода

Подразделение Intel Graphics R&D представило в 2020 году документ под названием Ленивое построение структур ускорения с помощью шейдеров обхода и те из вас, кто хоть немного владеет языком Шекспира, сделают вывод, что он состоит из построения тех же структур пространственных данных с использованием шейдеров обхода. Таким образом, их можно использовать не только для управления курсом, но и для его построения.

Первое, что бросается в глаза, - это Lazy Build, которую мы можем преобразовать, получив образование, как сборку с небольшими усилиями. А из чего он состоит? Что ж, этот метод стремится к сокращению времени построения структуры данных. Для этого он основан на предыдущей информации из предыдущих кадров, добавленных в алгоритм видимости, и если это кажется запутанным, давайте определим, что означает видимость, когда мы говорим о 3D-рендеринге.

Видимость

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

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