本文主要是介绍延时渲染(Deferred Shading),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、延时渲染的优势
延时渲染(deferred shading)相对于前向渲染(forward shading)主要有以下两个优势:(1) 只对看得见的像素进行光照计算,对于深度比较复杂(像素被超过4个以上的面片所覆盖)以及灯光数目较多的场景,可以有效提高渲染速度;(2)将光照与其他效果分离,可以大大减少shader组合的数量,假设光照效果数为M,其他效果数为N,对于前向渲染,则需要组合出M*N个shader,而对于延时渲染,只需要M+N个shader即可。
2、延时渲染框架
图1:延时渲染pipeline
延时渲染是一种multi-pass渲染技术,分为几何pass和光照pass,然后有可选的一个或多个后处理pass。
geometry pass
这个pass的输入是一个object list,然后绘制每个object,但是并不直接输出到frame buffer,而是输出到几何缓存(Geometry Buffer)中,它其实就是一个opengl中的FBO(frame buffer object),几何缓存中包括diffuse map,position map以及normal map,其中position和normal map都用16位的浮点纹理存储,diffuse map直接用rgb纹理存储即可,position和normal是指在视图空间的位置和法线,因为法线是归一化的,所以只存储其xy分量即可,剩余的一个分量用来存储material id,其用来在lighting pass中索引material pallette。一个简单的geometry pass的shader如下:
vertex shader:
#
这篇关于延时渲染(Deferred Shading)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!