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