微软今年推出了DirectX12的升级版API——

DirectX 12 Ultimate,自2015年DirectX 12正式上线以来最为重大的一次更新,加入了许多新的特性。

DirectX 12 Ultimate 支持光线追踪、网格着色器、可变速率着色和采样器反馈,将游戏真实感提升至更高水平。

本文将详细介绍DirectX 12 Ultimate的特性。

DirectX Raytracing 1.1

DirectX Raytracing(DXR)是微软在2018年为DirectX 12引入的新特性,让它支持实时光线追踪处理。

1.0版本的DXR在软件特性上较为基础,且工作效率不高。而1.1版本增强了光线追踪方面的软件特性,效率更高。

GPU可直接调用光追

GPU上面的着色器在1.1版本中可以直接调用光线追踪,而无需使唤CPU来调用。

这项功能对于自适应光线追踪场景非常有用,尤其是在基于着色器实现的剔除、排序、分类和细化等场景中。

基本上今后的光线追踪工作可以在GPU上面准备并立即生成。

灵活加载光线追踪着色器

当在游戏世界、新的物件变为可见的过程中,流式引擎可以根据此时的画面需求来加载新的光线追踪着色器,提高处理过程的效率。

内联光线追踪

内联光线追踪(Inline raytracing)是目前基于动态着色器的光线追踪的一种替代形式,可以将其理解为一种简化的光线追踪。

开发者在内联光线追踪过程中将有更大的控制权,并且可以在任意的着色阶段调用它,包括计算着色和像素着色阶段。

它与传统基于动态着色器的光线追踪可以混合使用,对于简单的场景,内联光线追踪将会提供更好的性能表现,而在复杂场景中,基于动态着色器的光线追踪将会提供更好的运行效果。

可变速率着色

可变速率渲染(Variable Rate Shading)是一项由在NVIDIA Turing GPU上率先引入的加速着色特性。

Variable Rate Shading的原理是通过改变单次像素着色器操作所处理的像素数量,来改变屏幕不同区域的着色质量。可以改变同个画面中不同部分的渲染精细度,它的作用是提高画面帧数。

Variable Rate Shading未开启的情况下,每一帧画面的所有像素都是独立着色的;开启之后,原本独立的像素被分成了一个个像素块,它们之间会共享着色结果,此时GPU会根据设定的分级为所有像素块分配不同的着色精细度。

简而言之能够调整场景不同部分的着色率从而大幅提升性能。

VRS 可实现 NVIDIA 自适应着色,可逐帧测量运动和色彩的变化,智能降低天空、墙壁等不需要高着色率区域的着色率。

VRS 还可用于虚拟现实游戏的注视点渲染——在双目注视的区域描绘更多细节,同时减少视线不会注意到的周边区域的细节描绘。

网格着色器

在过去的二十年中,传统的几何图形处理管线已经增加了好几个阶段了,不过它的核心理念仍然基于传统的光栅化预着色方法的,放在今天已经过于复杂,并且拖累处理效率。

硬件和软件开发者都希望改变这一现状,于是,DirectX 12引入了网格着色器,它为开发者提供了前所未有的可编程能力。

在原本的管线中,GPU硬件的并行能力被隐藏,硬件会帮助打包操作然后并行的执行它,很高效但不够灵活。

网格着色器就完全改变了这一过程。在某一阶段中,网格着色器的每个线程都是针对一个顶点,而在另外一个阶段,每个线程针对着一个图元。

整个线程组的内存是共享的,访问灵活度很高,同时开发人员对硬件的控制权也更大,并能节约内存使用量和内存带宽。

与网格着色器一同出现的还有一个可选的放大着色器(Amplification Shader)阶段,它运行在网格着色器之前,计算得到需要多少个网格着色器,然后并启动他们。

采样器反馈

采样器反馈与可变速率着色理念想同:智能运作,降低 GPU 负载,从而提升性能。采样器反馈可提升纹理和着色器硬件之间的计算。

开发人员和引擎能够使用采样器反馈实现精密复杂的纹理流算法,带来拥有精美高分辨率纹理的大型开放世界,而且不会有阻碍沉浸感的卡顿和纹理突进。

采样器反馈还能用于实现纹理空间着色,提升渲染效率。

简单来说它的实际效果就是用更少的显存渲染更大、更丰富的纹理。

采样器反馈还包含了一项新技术——纹理空间着色。它可以在不栅格化对象的情况下进行对象着色,其中心目的就是缓存和重用着色结果,以减少GPU的计算量。

相关文章