开创DX11宏图霸业!镭HD5870权威评测
虽然DirectCompute的主要任务是用来处理非图形运算,但很多时候它还是需要做一些图形相关的擦边球任务、或者是辅助图形渲染,比如说视频数据处理、物理运算、人工智能等,这些操作最终还是需要通过显卡输出至屏幕,因此计算着色器会经常与像素着色器打交道,当像素着色器使用到计算着色器的新特性之后,就会衍生出一些意想不到的新特效。
接下来就为大家介绍一些属于DirectCompute 11的新技术,当然它们也属于DX11的范畴。
第二章/第三节 DirectCompute 11新特效:顺序无关透明化
烟雾、火焰、流水、玻璃、树叶、栅栏、头发……游戏中所出现的半透明物体数不胜数,程序员很难给这些物体设计一个固定的模型,它们不规则、随机的特性决定了单纯依靠传统的像素着色或者纹理贴图都是行不通的,因此这类物体有了一个新的称呼——Order Independent Transparency (OIT,顺序无关透明化)。
此前,程序员必须在每帧渲染之前对透明模型进行深度排序或者执行诸如深度剥离的Multi-Pass(多次)算法,以达成模型间正确的透明度。不管哪种办法,都不能像非透明模型那样实现正确的局部的Post-Processing(后处理)效果,而且会消耗很多资源。
DX11则首次在没有额外专用电路的情况下,透过一个每像素空间数据结构对多个透明表面的排序实现对顺序无关透明化的支持,解决方法就是让GPU参与运算,通过使用DirectCompute 11新增的原子操作,无需直接软件管理就能往分级缓存的不同层级装载数据,依照每个像素透明层数来分配独占的内存。如此一来程序设计的复杂度显著降低,并且数据结构可以采用难以预测的非结构化的内存存取,DirectCompute 11新增的附加缓冲也会派上用场。
由于DX10不支持原子操作,因此无法支持顺序无关透明化这项新特效,只能依靠传统的方式来实现差强人意的效果。而DX11不但画面更好,而且实现效率非常高,大量使用附加缓冲从而节约了显存带宽消耗。
上面的视频就是由HD5870实时演算出来的,机器人本身就是半透明的骨架,为其附加一层厚厚的外壳后,即便进行剧烈运动,性能也没有多少损失。DirectCompute 11不但让半透明物体的程序设计变得轻松,而且实时渲染效能也大幅提升,可以预见未来的DX11游戏将会大量使用半透明效果。