Новые функции DX12: Mesh Shader и Raytracing Tier 1.1
Из новинок отметим 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).