看了很多网上的文章,之前一直不明白为什么前向渲染的光照计算量要比延迟渲染大,其实关键是没有理解“深度测试”对光照计算的影响(光照计算采用pbr理论,计算量很大);
深度测试具有一定的随机性,如果一个像素点在z轴方向上有很多个三角形,那么其中绝大部分三角形的光照计算都是浪费的(最终只有最近的那个顶点才是有效的);
而采用延迟渲染则保证了最后参与光照计算的那个三角形(其实是顶点)肯定都是有效三角形,从而降低了整体的计算量;
当然,延迟渲染也不是完美的,缺点是要消耗很多内存buffer和带宽资源, 所以在手机上又引入了TBDR框架(Tile based delay rendering);
注:在延迟渲染中,在Gemeory-pass生成gBuffer之后用于光照pass的输入,在光照Pass中,第一个DrawCall一般是先绘制不透明物体,后面DrawCall再绘制透明物体,再绘制光照相关的信息;
前向渲染和延迟渲染:https://www.cnblogs.com/nafio/p/12789848.html
深度测试:https://www.jianshu.com/p/82af21eda232