Deferred又称为延迟渲染,它是后处理渲染技术的一种,网上也有相关的定义说明,它主要是采用GBuffer实现的,GBuffer可以存储的信息相比ZBuffer更多,GBuffer存储了法线,位置,灯光信息等等。Unity引擎也提供了Deferred渲染,只是因为在手机端比较耗,所以大部分开发者并不是特别关注,其实它在引擎渲染里面也是非常重要的技术。我们自己编写引擎模块还是要亲自写一下,这样有助于自己更深入的理解,遇到不明白的地方,网上提供了大量的资源供我们参考,其实你能够用别人的技术做出自己的产品,这本身也说明了自己的编程能力,你使用别人的技术首先要先搞清楚原理,这样你才可以用在自己的产品中,否则就不要死板硬套了,会出问题的。
我们在上篇博客中给读者介绍了关于引擎底层对Shader的处理,我们介绍关于Deferred延迟渲染的实现,Shader渲染是需要灯光的支持,延迟渲染同样也有很多种类,如下图所示:
Deferred渲染技术实现首先要初始化G缓冲区,因为我们要渲染的信息都保存在GBuffer中,Deferred渲染核心就是对G缓冲区里面的数据进行处理,上面我们提到过GBuffer缓冲区会保存,位置,法线,光照等信息,引擎也会对它们进行处理。下面是我们对GBuffer缓冲区处理的代码如下所示:
在上述代码中,我们使用了AddRenderTarget函数用于对GBuffer缓存区中所存信息处理,再把这个函数的实现给读者展示如下所示:
在此,我们调用了CreateRenderTargetVie