决战性能之巅!NV双芯旗舰GTX590评测
就像大家通过数码相机拍完照片后需要经过PS处理一样,3D模型在GPU内部渲染完成后也会经过后端处理才会显示在屏幕上,这一过程叫做“Render Post-Processing”(渲染后端处理),常见的如“边缘侦测与抗锯齿、各向异性过滤、景深、运动模糊、色彩映射、滤波、锐化”等一些列特效都是在这一阶段加上去的。
8.5 DirectCompute11的妙用:电影级景深
GPU有专门负责渲染后端处理的模块,叫做“Render Back-Ends”(ROPs),也就是通常所说的光栅单元,这个模块位于流处理器与显存控制器之间,也就是说它渲染完毕后将会把数据直接输出到显存与屏幕。
在DX10时代,光栅单元的任务量是很重的,如果大量使用后端处理特效的话,很容易出现像素着色器等待光栅单元的情况出现。所以很多DX10游戏的GPU负载还不如DX9C游戏就不足为怪了。而DX11则通过一个巧妙的方式降低了光栅单元的负担,确保流处理器和光栅单元能够协同工作,原理依然是使用计算着色器。
各种后端处理特效的最终效果虽然千差万别,但它们大多数都有一个共同的特点,那就是需要对比相邻位置像素或者相邻帧之间像素的差别,然后进行对比与合成。这一拾取动作其实只用一个函数就能完成——Gather4,它使得计算着色器能够越权进行数据采集动作,帮助纹理单元和光栅单元的减轻负担,而且计算着色器的数据采集速度是专用单元的4倍!
DX10版景深特效的实现方法
具体一点例子,比如DX10级别的运动模糊和景深特效,都是通过几何着色来实现的,通过几何着色控制运动物体的坐标变换与像素监控,或将深度帖图中的纹理信息按照距离拆分到缓冲,然后分为几个不同的视角进行渲染,最后合成完整的图像,实现比DX9C更精确、更流畅的特效。画面效果是更出色了,但几何着色并没有帮助光栅单元做任何事情,数据处理反而翻了好几倍,导致性能下降比较严重。
而通过使用DirectCompute 11中的新指令,后端处理特效可以最大限度的降低显存读写次数、大幅降低光栅单元的负担,当然流处理器将会承担更多的任务(几何着色、计算着色、像素着色、外壳着色和域着色),但依然能够保持相对的平衡,不会出现DX10当中GPU资源负载不均的情况。
DX11新作《地铁2033》当中使用DirectCompute11实现景深效果
《地铁2033》对比:点击放大仔细观赏人物背景的差别
刚刚发布的DX11大作《地铁2033》就使用了DX11级别的景深效果,清晰和虚化合理分配、主次分明,再搭配Tessellation技术的辅助,几乎接近与电影的拍摄效果,看起来有种赏心悦目的感觉。但该游戏由于使用了太多尖端图形技术,所以要求非常苛刻。