demo
![](https://i-blog.csdnimg.cn/direct/e391407fa1a24932a9e62101895de252.png)
延迟渲染管线
- 正向渲染:一个物体渲染完成,接着渲染下一个,对于光源需要对每个片段迭代计算,复杂度很高
- 延迟渲染(Deferred Rendering):几何处理阶段,渲染场景到G缓冲(G-buffer)的纹理中(例如各种向量,镜面值……),并不用做复杂的光照计算,光照处理阶段(Lighting Pass),渲染屏幕大小的方形,使用G缓冲内的纹理数据,
- 这样并不直接获取顶点着色器中的数据,而是延迟到G缓冲获取,因为深度测试已经将片段更新最顶层的片段(纹理的深度存储)。这样保证了对于在光照处理阶段中处理的每一个像素都只处理一次,
- 缺陷
- 纹理颜色缓冲中存储相对比较大的场景数据,这会消耗比较多的显存
- 不支持混合,因为我们只有最前面的片段信息
- 不支持MSAA,因为每个像素只有一个样本
- //
MRT
- G缓冲 + MTRshader,使用MTR将数据渲染到多个颜色缓冲
- //
结合正向渲染
- 光照处理:quad + shader:渲染quad,将G缓冲的数据作为纹理
- 为了避免延迟渲染的缺陷,或者其他计算光照的方式,需要结合正向渲染,需要在延迟渲染之后进行-
- 但是这样没有考虑深度信息,需要利用glBlitFramebuffer将上一阶段的深度信息,复制到默认帧缓冲中,再正常渲染(可以默认帧缓冲直接运行)