GPU:详解DirectX 12 Ultimate:一次面向未来应用的大升级


微软于昨晚正式宣布推出DirectX 12的最新升级版——DirectX 12 Ultimate , 这可以说是DirectX 12从2015年正式上线以来最为重大的一次更新 , 它加入了许多新的特性 , 实际上其中的部分特性已经在去年十月份已经预告过了 , 原本它应该会作为Direct3D 12 Feature Levels 12_2出现的 , 不过这次微软改名部上线了 , 给新版本DirectX 12加了个“Ultimate”的后缀 , 那今后比DirectX 12 Ultimate更强的新版本会叫什么呢?
GPU:详解DirectX 12 Ultimate:一次面向未来应用的大升级
本文插图
以后支持DX12 Ultimate的产品在包装盒上可能会增加这个Logo
好了话说回来 , 官方在博文中给出了有关于新特性的一些详细内容 , 本文就尝试解读一番 。
首先DirectX 12 Ultimate中新增的特性主要有四大块 , 分别是DirectX Raytracing 1.1、可变速率渲染、Mesh渲染器和采样器反馈(Sampler Feedback) 。
DirectX Raytracing 1.1 DirectX Raytracing(DXR)是微软在2018年为DirectX 12引入的新特性 , 让它支持实时光线追踪处理 。 1.0版本的DXR在软件特性上比较基础 , 可以说它是围绕着Turing架构的硬件实现而设计的 , 当时也没有从软件开发角度去考虑如何实现光追 。 而1.1版本扩展了DirectX 12在光线追踪方面的软件特性 , 让它的效率更高 , 同时对开发者也更友好 。 主要有三点:
允许GPU直接调用光追 跑在GPU上面的着色器在1.1版本中可以直接调用光线追踪 , 而无需折返CPU来调用 。 这项功能对于自适应光线追踪场景非常有用 , 尤其是在基于着色器实现的剔除、排序、分类和细化等场景中 。 基本上今后的光线追踪工作可以在GPU上面准备并立即生成 。
按需加载光线追踪着色器 当玩家在游戏世界中移动、新的物件变为可见的过程中 , 流式引擎可以根据此时的画面需求来加载新的光线追踪着色器 , 提高处理过程的效率 。
内联光线追踪 内联光线追踪(Inline raytracing)是目前基于动态着色器的光线追踪的一种替代形式 , 你可以将其理解为一种简化的光线追踪 。 开发者在内联光线追踪过程中将有更大的控制权 , 并且可以在任意的着色阶段调用它 , 包括计算着色和像素着色阶段 。 它与传统基于动态着色器的光线追踪可以混合使用 , 对于简单的场景 , 内联光线追踪将会提供更好的性能表现 , 而在复杂场景中 , 基于动态着色器的光线追踪将会提供更好的运行效果 。
可变速率渲染 可变速率渲染(Variable Rate Shading)是一项由NVIDIA在其Turing GPU上率先引入的加速渲染特性 , 具体介绍可以看我们的课堂文章:《超能课堂(212):VRS可变速率着色为什么可以提高帧数?》 , 这边就简单讲一下它的原理 , 而不再赘述细节了 。
简单来说 , VRS的原理是通过改变单次像素着色器操作所处理的像素数量 , 来改变屏幕不同区域的着色质量 。 简单来说 , 它可以改变同个画面中不同部分的渲染精细度 , 它的用处是提高画面帧数 。
GPU:详解DirectX 12 Ultimate:一次面向未来应用的大升级
本文插图
在不开启VRS的情况 , 也就是正常情况下 , 一帧画面的所有像素都是独立着色的;而开启VRS之后 , 原本独立的像素被分成了一个个像素块 , 它们会共享着色结果 , 此时GPU会根据程序员设定的重要性分级为所有像素块分配不同的着色精细度 。 拿上面的图片为例 , 车辆和远景部分的像素仍然是独立着色的 , 但快速变动的道路和路边的像素块就是区块共同着色的 , 此时由于显卡的计算资源得到了节约 , 所以游戏的帧数会有所提高 。
在NVIDIA以外 , Intel已经在Ice Lake处理器中的第11代核显中加入了针对VRS的支持 , 而AMD方面则暂时没有相关支持 , 不过他们也已经宣布将会在RDNA 2架构中加入相关支持 。


推荐阅读