> > > > Новые функции DX12: Mesh Shader и Raytracing Tier 1.1

Новые функции DX12: Mesh Shader и Raytracing Tier 1.1

Опубликовано:

microsoft 2Со следующим крупным обновлением Windows 10, которое часто называется 20H1, Microsoft представит новые функции DirectX 12. Они как раз будут доступны разработчикам следующих версиях Windows 10 Insider Preview.

Из новинок отметим DirectX Mesh Shader, DirectX Raytracing Tier 1.1 и DirectX Sampler Feedback, а также Texture Space Shading и Texture Streaming.

Весной 2018 Microsoft анонсировала интерфейс DXR, который впервые был ориентирован на эффекты трассировки лучей. Чуть позже летом NVIDIA объявила соответствующую поддержку с аппаратным ускорением на ядрах RT архитектуры Turing. На данный момент NVIDIA остается единственным производителем GPU, работающим с новым интерфейсом DXR, хотя и другие компании могут выполнять подобные расчеты через потоковые процессоры. Но аппаратное ускорение в ядрах RT позволило NVIDIA рассчитывать, по крайней мере, часть кадра с эффектами трассировки лучей. В грядущем году игровые консоли тоже будут поддерживать трассировку лучей, AMD также объявила соответствующую поддержку.

Обновление DirectX 12 теперь добавляет DirectX Raytracing Tier 1.1 и DXR Tier 1.1. Ниже приведены новые функции.

  • Support for adding extra shaders to an existing Raytracing PSO, which greatly increases efficiency of dynamic PSO additions.
  • Support ExecuteIndirect for Raytracing, which enables adaptive algorithms where the number of rays is decided on the GPU execution timeline.
  • Introduce Inline Raytracing, which provides more direct control of the ray traversal algorithm and shader scheduling, a less complex alternative when the full shader-based raytracing system is overkill, and more flexibility since RayQuery can be called from every shader stage. It also opens new DXR use cases, especially in compute: culling, physics, occlusion queries, and so on.

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

DirectX Mesh Shader

В DirectX 12 теперь интегрированы Mesh Shader. На 3D-сценах с большим количеством объектов производительность обычно упирается в расчеты геометрии, которые частично выполняются на процессоре. Мы получаем типичное "узкое место". И здесь Mesh Shader как раз дают определенную гибкость применительно к геометрическому движку.

С помощью LOD (Level of Detail) можно менять уровень детализации при выводе объектов в зависимости от расстояния. В большинстве игровых движков LOD фиксирован, пользователи иногда могут менять LOD в настройках, но возможность динамически изменять LOD в зависимости от 3D-сцены и ее сложности отсутствует.

Для сцены с 200.000 объектами на расчет геометрии остается только 2 мс - если требуется получить 60 FPS. Что приводит к 10 нс на каждый объект, включая необходимые расчеты LOD и вызовы Draw Call. В результате современные 3D-движки могут оперировать 20.000-30.000 объектами на сцене, не больше. С адаптивным LOD и Mesh Shading геометрия сцены может включать 200.000 объектов.

Mesh-шейдеры могут гибко определять LOD в зависимости от загрузки движка рендеринга. Теперь процессору уже не придется выполнять определенное количество вычислений для фиксированного LOD и object culling (отсечение невидимых объектов) - ему достаточно лишь выполнить процедуры Draw Call для Mesh Shaders. В данном случае шейдеры (Vertex и Hull) объединены в Task-шейдеры, которые и отвечают за выбор LOD и отсечение невидимых объектов. Шейдеры доменов и геометрии теперь объединены в Mesh-шейдеры.

NVIDIA уже реализовала Mesh Shaders в качестве функций архитектуры Turing.

Texture Streaming

Текстуры становятся все более детализованными, миры - все крупнее и масштабнее, что приводит к увеличению времени загрузки. Для сокращения времени загрузки весьма полезна функция Texture Streaming, которая будет подгружать текстуры в память видеокарты только при необходимости. С помощью Feedback Map семплер получает необходимую обратную отдачу.

  • Render scene and record desired texture tiles using Sampler Feedback.
  • If texture tiles at desired MIP levels are not yet resident:
  • Render current frame using lower MIP level.
  • Submit disk IO request to load desired texture tiles.
  • (Asynchronously) Map desired texture tiles to reserved resources when loaded.

Данные Sampler Feedback могут использоваться и для Texture Space Shading. То есть некоторые расчеты шейдеров не придется повторять каждый раз, результаты можно использовать повторно, что в некоторых случаях позволяет существенно увеличить производительность видеокарты.

  • Draw geometry with simple shaders that record Sampler Feedback to determine which parts of a texture are needed.
  • Submit compute work to populate the necessary textures.
  • Draw geometry again, this time with real shaders that apply the generated texture data.

Игровые разработчики уже могут приступать к добавлению новых функций. DXR Tier 1.1 и другие функции будут добавлены в новые сборки Windows 10 Insider Preview Build и SDK Preview Build для Windows 10 (20H1).