26.延迟渲染


文档摘要

我们将需要用到UV计算的数据,都写入到了G-Buffer中。 这里有一点要特别注意,在延迟渲染阶段,其实是一个屏幕后处理,片段Shader中是对全屏像素进行处理的,那么在计算光照效果时,是全屏幕每个像素都参与的。 这就带来了问题,环境光,它会对屏幕每个像素都计算一遍,给屏幕上每个像素都渲染成环境光的颜色。 但是为什么实际运行效果又没有出现这个问题呢? 这个关键就在 ,在渲染到G-Buffer阶段,只有实际有顶点数据存在的片段,才会被渲染到 ,空白区域 是(0,0,0),不管是环境光还是方向光、点光源的计算都是要乘以 ,那么空白区域就都是(0,0,0)。

我们将需要用到UV计算的数据,都写入到了G-Buffer中。

这里有一点要特别注意,在延迟渲染阶段,其实是一个屏幕后处理,片段Shader中是对全屏像素进行处理的,那么在计算光照效果时,是全屏幕每个像素都参与的。

这就带来了问题,环境光,它会对屏幕每个像素都计算一遍,给屏幕上每个像素都渲染成环境光的颜色。

但是为什么实际运行效果又没有出现这个问题呢?

vec3 frag_diffuse_color = texture(u_frag_diffuse_color_texture,v_uv).rgb; //ambient vec3 ambient_color = u_ambient.data.color * u_ambient.data.intensity * frag_diffuse_color;

这个关键就在frag_diffuse_color,在渲染到G-Buffer阶段,只有实际有顶点数据存在的片段,才会被渲染到frag_diffuse_color,空白区域frag_diffuse_color是(0,0,0),不管是环境光还是方向光、点光源的计算都是要乘以frag_diffuse_color,那么空白区域就都是(0,0,0)。

然后还有一个问题,glClearColor清屏颜色被写入到了G-Buffer的所有FBO中了,对G-Buffer中存储的几何数据造成了影响,所以glClearColor只能用黑色来清屏了。


发布者: 作者: 转发
评论区 (0)
U