Вышло крупнейшее апдейт DirectX для трассировки лучей с 2018 года

4 мин
Вышло крупнейшее апдейт DirectX для трассировки лучей с 2018 года

Команда DirectX представила самое масштабное апдейт подсистемы трассировки лучей с момента ее запуска в 2018 году. В превью-версии Agility SDK 1.722 разработчикам открыли доступ к кластерной геометрии и разделяемым структурам ускорения верхнего уровня (PTLAS). Нововведения устраняют давнее узкое место DXR, когда постоянный пересчет BVH для насыщенных динамических сцен приводил к большим потерям производительности. Параллельно с этим Microsoft выпустила версию Agility SDK 1.620, которая принесла инструменты отладки DirectX Dump Files и оптимизации шейдеров. 

Задача BVH

В базовой архитектуре DirectX Raytracing геометрия сцены организуется в двухуровневое дерево ограничивающих объемов (Bounding Volume Hierarchy — BVH). Структуры нижнего уровня (Bottom-Level Acceleration Structure — BLAS) содержат практические полигональные данные отдельных мешей, а структура верхнего уровня (TLAS) объединяет экземпляры этих объектов в глобальном пространстве кадра.

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

Кластерная геометрия и структуры PTLAS

Для устранения этих ограничений Microsoft внедрила в Agility SDK 1.722 Preview оболочку Clustered Geometry. Геометрия дробится на небольшие независимые кластеры (до 256 треугольников и вершин в каждом). Вместо создания монолитных деревьев для каждого крупного объекта движок компонует структуры ускорения нижнего уровня из этих стандартизированных кластеров. При локальных изменениях или анимациях перестраиваются только затронутые блоки, а не полигональный массив целиком. Такой решение даёт возможность рендереру использовать один и тот же детализированный меш как для стандартного пайплайна растеризации, так и для структур трассировки лучей.

В паре с кластеризацией представлена технология Partitioned TLAS. PTLAS позволяет изолированно модифицировать конкретные секторы глобальной сцены без полного пересчета всего графа TLAS. Обе операции поддерживают сборку полностью на стороне GPU: отпадает необходимость задействовать центральный процессор и гонять информация через PCIe перед диспетчеризацией лучевых шейдеров.

Результаты тестов и аппаратная совместимость

Авторы продемонстрировали улучшения на примере тестового стенда D3D12RaytracingClusteredGeometry, запущенного на видеокарте AMD Radeon™ RX 9070.

Переход от обычного ребилда BLAS к кластерной модели сократил время построения структур ускорения с 788 мс до 3,11 мс (то есть ускорение примерно в 254 раза), а общее время выполнения трассировки сократилось с 72,6 мс до 9,27 мс. Потребление видеопамяти под финальные структуры ускорения снизилось с 7 519 МиБ до 774 МиБ (экономия почти 90%). Платой за параллелизм стало увеличение требований к промежуточной рабочей памяти: под построение статичных кластеров потребовалось 526 МиБ против 1,83 МиБ в классическом сценарии. Итоговая частота кадров в демонстрационном тесте выросла с 1,2 FPS до 79 FPS. 

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

Microsoft подчеркивает, что кластеризованный пайплайн не требует новых аппаратных инструкций сверх уже реализованных в чипах с поддержкой DXR. Ранее похожие техники применялись вендорами изолированно — примером служит проприетарная техника RTX Mega Geometry от NVIDIA, показанная в Gears of War: E-Day. Текущее апдейт стандартизирует подход на уровне программный интерфейс DirectX 12. На этапе предварительного тестирования заявлена поддержка на видеокартах семейств NVIDIA® GeForce RTX®, AMD Radeon™ RX 9000, ускорителях Intel® Arc™ B-Series и встроенной графике процессоров Core™ Ultra при наличии актуального драйвера.

Арендуйте хост с доставкой на вашу площадку

Предоставим мощные серверы для запуска проекта on-premise с помесячной оплатой, полным контролем над железом на этапе запуска и возможностью выкупа.

Арендовать →

Оптимизация компиляции шейдеров и стабильный Agility SDK 1.620

В дополнение к экспериментальных функций DXR в предварительной сборке, Microsoft выпустила стабильный выпуск Agility SDK 1.620 с улучшениями в подсистеме Advanced Shader Delivery.

Основное нововведение — «частичные графические программы». Алгоритм позволяет компоновать и повторно использовать предварительно скомпилированные шейдерные модули в различных конфигурациях графического конвейера. Это решает проблему раздувания бинарных файлов и минимизирует микрофризы во время фоновой jit-компиляции на этапе загрузки локаций. Пока оптимизация доступна только на адаптерах Radeon™ RX 7000 и RX 9000, но в будущих релизах вендоры добавят поддержку на других архитектурах.

В релиз 1.620 также включены специализированные файлы дампов DirectX Dump Files для анализа аварийных завершений видеодрайвера, барьеры синхронизации Fence Barriers Tier 1, интерфейсы пакетирования команд Batched Asynchronous Command List и программный оболочку компилятора DirectX Compute Graph для ускорения инференса машинного обучения. Финальная релиз компилятора с поддержкой Shader Model 6.10 запланирована к выходу в составе декабрьского Agility SDK 1.621.

А что вы думаете по поводу такого обновления? Делитесь мыслями в комментариях.

Поделиться

TelegramVK