● Compute Shader助力图形渲染
微软在DirectX 11引入了DirectX Compute概念,实际上这个概念在以前就存在不少应用。DirectX Compute在通用计算领域的增强,进一步提升了GPU通用计算的动能。OpenCL是GPU通用计算的API标准,它提供了并行计算API和一个扩展的编程语言,DirectX Compute增强了GPU通用性能,但由于重点不同,它与OpenCL完全不是竞争关系,反而进一步增强了OpenCL的实用性——DirectX 11提升GPU通用性能,基于OpenCL的通用计算程序将更富效率。
DirectX Compute概念包括了我们下面即将介绍的Compute Shader技术,实际上我们可以理解为它们是一种技术,两种称谓方式。所以下文我们直接称呼这种让GPU通用计算来辅助图形处理的技术为Compute Shader技术。
GPU是图形处理器,以往的GPU通用计算需要程序员先将资料伪装成GPU可识别的图像,再将GPU输出的图像转换为想要的结果,而通过DX11中的Compute Shader通用计算,任意类型的数据(即使是非图形数据)都可以直接进行计算,而且不受图形渲染流程的束缚,可以随时写入写出,GPU通用计算的效能提高了很多。
由于GPU的浮点运算能力非常强大,支持GPU进行通用计算的技术发展势头很快,NVIDIA和AMD分别有CUDA和Stream技术,以前两家是各自为战,如今微软也看到了GPU通用计算的曙光,在DX11中加入了Compute Shader这一技术,意在统一当前的通用计算技术。你可以认为Compute Shader标准就是微软提出的OPEN CL。
Compute Shader图形流水线
Compute Shader主要特性包括线程间数据通信、一整套随机访问和流式I/O操作基本单元等,能加快和简化图像和后期处理效果等已有技术,也为DX11级硬件的新技术做好了准备,对于游戏和应用程序开发有着很重大的意义。
在DirectX 11以及CS的帮助下,游戏开发者便可以越过复杂的数据结构,并在这些数据结构中运行更多的通用算法。与其他完整的可编程的DX10和DX11管线阶段一样,CS将会共享一套物质资源(也就是着色处理器)。
Compute Shader可发挥的地方很多,游戏中可以使用GPU进行光线追踪、A-Buffer采样抗锯齿、物理特效、人工智能AI等游戏特效运算。在游戏之外,程序员也可以利用CS架构进行图像处理、后期处理(Post Process)等。
Compute Shader技术是微软DirectX 11 API新加入的特性,在Compute Shader的帮助下,程序员可直接将GPU作为并行处理器加以利用,GPU将不仅具有3D渲染能力,也具有其他的运算能力,也就是我们说的GPGPU的概念和物理加速运算。
在上图中,图一表示了Compute Shader做图像后处理(Post Process),图片是《地铁2033》的游戏截图,利用Compute Shader技术做景深处理可以得到更好的效率。图二表示利用Compute Shader技术做IA人工智能。图三表示CUDA或者未来的Compute Shader结合OptiX技术做光线追踪。图四表示SPH流体模拟,流体的模拟,是典型的通用计算应用实例,对Shader性能要求较高。
用更加通俗易懂的话来解释,Compute Shader技术实际上就是一道把GPU通用计算和传统图形处理沟通起来的桥梁。未来更多的特性特效将通过GPU通用计算来实现。借助这一技术GPU中的流处理器单元可以变为类似CPU的计算中心,处理一系列如后期渲染、图像质量增强、高质量阴影过滤、景深效果以及高级环境光遮蔽效果。
Computer Shader的初衷,就是使用通用计算的手段来进行后处理。由于GPU的浮点运算能力非常强大,支持GPU进行通用计算的技术发展势头很快,NVIDIA和AMD分别有CUDA和Stream技术,以前两家是各自为战,如今微软也看到了GPU通用计算的曙光,在DX11中加入了Compute Shader这一技术,意在统一当前的通用计算技术。你可以认为Compute Shader标准就是微软提出的OPEN CL。