● 后效、CS、Deferred、调料球以及老白干
每一个家庭主妇/煮夫都有自己的厨房“一招鲜”,那就是各种令人眼花缭乱的香料。花椒大料草果香叶桂皮白芷肉豆蔻罗勒草百里香……只需要在烹调时加上那么一点点,一道美食便好像经历了点石成金的炼化一般焕发出了诱人的香气。图形渲染同样有属于自己的“一招鲜”,那就是层出不穷的渲染技巧和先进的可编程技术。
幕后英雄之八角、香叶、桂皮
对于视觉效果处理而言,单纯的材质操作和Pixel Shader都显得“简单粗暴”,是不足以及时高效的表达全部特性的。只有适当的辅以各种巧妙的直接表达或者间接提升效率的手段,我们才能更加流畅的获得特效更加丰富细腻的图形表现。所以我们需要感谢各种长期存在于幕后甘当隐形英雄的那渲染技巧和新技术,比如PostProcess、Compute Shader或者Deferred Shading等等。
PostProcess(后效处理)是一种在完成常规渲染之后将目标送回像素流水线进行再加工的处理手段,大部分时候它都以Pixel Shader为实现手段。PostProcess可以以更强烈的目的性和针对性来实现诸如模糊、景深以及特殊光效果处理等“传统”特效,这种二次修饰甚至多次修饰的过程大大简化了初始渲染的难度和精度要求,事实上等效于将渲染及特效实现任务分解成了更加简单的多个部分,并且提升了完成同样效果前提下整个流水线的渲染速度。
Deferred Shading是一种通过延迟处理的思路,将光照操作的步骤从传统的Pixel Shader前段直接转移到整个流水线后端的MRT(多目标渲染)的处理方式。作为延迟渲染的一种操作手段,它可以让所有像素在统一完成其他一切步骤并实现Z Occlusion Culling之后再集合在一起统一进行关于光照的运算和操作,从而避免了大量的无效光照计算。Deferred Shading透过延迟操作可以完成几乎全部涉及光照的操作,能大幅提升可操作光源总量,而且场景的复杂度越高,Deferred shading所能够带来的效率提升也就越明显。
Compute Shader+Deferred Shading实现的1000光源场景
Compute Shader是DirectX 11相对于之前版本DirectX最大的革新,它的最大特点在于解除了Shader Programs的几何关联限制。剥离几何极大地提升了Compute Shader的执行效率,近乎于纯数学指令形式的Compute Shader可以使用比过去灵活很多的各种全新buffer,可以透过并行管理方便的实现数据共享,可以透过树结构和延迟操作快速执行任意过程,还可以以纯数学代码的形式插入到任意图形过程中以提升这些过程的速度。
这些幕后英雄并不是渲染过程的主力,它们就好像我们做红烧肉时放进去的那两勺老白干或者调料球里的八角桂皮等等香料一样。香料从来都不是食物中直接被食用的那部分,甚至对于相当一部分懒人来说都是可有可无的存在,即便一点都不加,食物在烹熟之后照样可以食用。但香料可以为食物的味道增色颇多,让食客能够体会到“美食既愉悦”的感觉,所以要想善待自己的舌头,适当加入合适的香料是必须的。后效或者CS等等技术的作用也是一样,它们可以加快整个图形渲染的进程,让有限的GPU资源可以更有效为程序员所用,并借以实现更多更为精彩的视觉特效。
推荐经销商