DirectX 12其实也是在不断地进行着更新的,虽然微软这次没有再使用像以前的DirectX 9.0c、DirectX 11.1这样的名字来命名DirectX 12的新版本,但它其实是与Windows 10的大版本一起更新的,从2015年7月份的首个Windows 10版本开始到现在,它已经有三次比较重大的特性更新了,这次伴随着Windows 10 20H1版本更新,它又加入了非常多、改变颇大的新特性。
DirectX Raytracing Tier 1.1第一个比较重大的新特性是DirectX光线追踪层级(Tier)1.1,如同之前将Direct3D 12中的一些特性分成不同的层级一样,微软将光线追踪也开始分成不同的层级,这次他们新引入的Tier 1.1是在初始引入的光追版本上加入了对于下述新特性的支持:
在现有的光线追踪管线状态对象(PipelineStateObject)中可以加入额外的着色器(Shader),这可以大幅度提高动态PSO添加的效率。 支持光线追踪的间接执行(Execute Indirect for Raytracing),它将启用自适应算法,由GPU执行时间轴自行决定要处理的光线数量。 引入了新的内联式光线追踪,它可以更直接地对光线的遍历算法和着色器事务进行管理,是一个在整个基于着色器的光线追踪系统过于繁重复杂时的一个轻量化的替代品,因为在每个着色器阶段都可以调用RayQuery,所以它具有更好的灵活性。它还开启了新的DXR使用场景,特别是计算场景,比如剔除、物理演算、物体遮挡查询等。DXR 1.1层级是现有1.0层级的一个超集。游戏开发者们应该基于现在的1.0层级构建光线追踪方案,如果他们认为1.1层级将给游戏带来更好的收益,他们就应该升级到1.1层级上去。
DirectX Mesh Shader PipelineMesh着色器和放大(amplification)着色器将会取代现在的传统图形渲染管线上面的各种着色器, 形成一条新的渲染管线。使用新渲染管线的主要目的是增加增加整个渲染流程中的灵活性并提高性能表现。Mesh着色器实际上就是将原来流程中的各种着色器统一成一种,它们将在一组有相互关联的线程之间进行协作。将着色器整合到一起之后它们不必再经历将自己的输出写入内存供下一步的着色器使用这一流程,另外管线的并行化可以提升,因此总体的性能将会得到提升。
Mesh着色流程带来的更强的灵活性和更好的性能可以让游戏开发者增加更多的画面细节,或者在不牺牲帧率的情况下渲染更为复杂的场景画面。
DirectX Sampler Feedback采样器反馈是一项新的硬件功能,它会记录下采样操作访问到的纹理区域。有了采样器反馈,游戏可以在渲染过程中将反馈情况记录生成“反馈图(Feedback Map,这里的Map应该指的是数据类型中的那个Map)”,它会记录不同纹理区域的不同驻留等级。将在以下两个场景中产生影响:
一个是纹理流(Texture Streaming),另一个是纹理空间阴影(Texture-Space Shading),首先来看前者。
许多现代的游戏都有相同的难题:在渲染材质质量越来越高、面积越来越大的游戏世界时,在加载时间上面会变得更长,同时可能还会遇到内存压力。游戏开发者们只好削减他们游戏的材质质量,或者在运行时加载比刚需更多的材质。在4K分辨率下,整个MIP等级为0的高质量材质会占据大量的空间。所以仅加载MIP等级最详尽的必要部分是开发人员们非常想看到的事情。
于是使用采样器反馈可以大幅提高在正确的时间内加载正确的数据这件事情的准确性。
在另一个场景中,采样器反馈起到的作用也是类似的,游戏可以动态计算并在纹理中存储着色器中间值,从而在空间和时间两个维度上减少了冗余。在这里,采样器反馈可以通过避免对材质进行不必要的工作而减少计算量,大大提高效率。
总结以上三项是新版本DirectX 12中主要的改变,还有一些小的特性这里官方也没有详细讲。
DirectX 12的新功能目前已经加入到了Windows 10的下一个重大版本,也就是开发了许久的20H1中,由于在新版本上面加入了如Sampler Feedback这样需要硬件来支持的功能,所以未来的GPU中应该会出现类似的功能,就像可变速率着色一样。同样,这些新改动也反映出新时代的游戏图形变化趋势,微软正在尽可能地在Direct3D API层面上面增加着效率,推动着业界走向更高分辨率的未来。