● Deferred shading与Compute Shader
我们前面已经介绍过了,Compute Shader是一种纯数学形式的代码,它不仅可以结合延迟操作模式和树状结构方便的进行线程间的大并行度管理,实现跨指令的数据共享,快速的实现各种通用计算应用,而且取消了代码形式上对几何过程的强制关联。
在得知Compute Shader取消了强制几何关联的一瞬间,全世界的程序员眼前都被一道光芒划过了。因为得益于取消关联的改动,Compute Shader面前出现了另外一种应用方式——Compute Shader可以利用自己数学代码的身份,在不干扰图形过程执行的前提下方便而且随意的插入图形处理中任何一个需要数学运算的过程。
没错,这就是答案,“破界者”由来的答案,不仅是本文而且也是整个图形界所要追寻的答案。因为对于程序员来说,这几乎意味着无限的可能性。
既然已经了解了Deferred shading过程,那就让我们从Deferred shading的角度出发,看看程序员究竟是怎样面对“无限的可能性”的。
在整个过程开始之前,程序员可以很方便的将Compute Shader代码直接插入到常规的载入操作之后,Pixel Shader指令除了多了一段数学代码之外没有任何变化,执行所需的PASS也基本上不变。在处理完前面的G buffer LOAD以及Z/Depth LOAD之后,硬件透过Compute Shader代码直接开始运算场景中每个光源背后所导致的数学运算,甚至连光照模型的二维化都可以通过Compute Shader来进行。完成这些之后再将数值送给output buffer,整个过程以原子操作来进行管理,从外部来看就好像什么都没有改变一样。
以Compute Shader完成的Deferred shading过程
就这么简单?是的,就这么简单。
真的什么都没有改变么?不,不仅不是什么都没有改变,而且是改变的惊天动地。
透过Compute Shader带来的运算能力的方便调用,整个系统处理Deferred shading的效率暴增至原来的几十甚至数百倍,能够面对的总光源数被快速的放大,这所带来的直接结果就是场景中同时出现光源数量的激增。在效率允许的情况下,支持Compute Shader的硬件可以为程序提供充足的效率换效果的空间,更多的光源意味着更加接近自然光的光线关系表现,也就是更好的图形体验。
久旱逢甘露,急需的运算和快速处理能力来了,而且来的如此简单直接。透过Compute Shader,通用计算和图形计算终于被彻底的紧密的联系在了一起。
- 第6页:只有延迟还远远不够
- 第7页:DirectX 10不是救世主
- 第8页:Deferred shading与Compute Shader
- 第9页:我们需要更多,也能做更多