查看: 1319|回复: 0

前向渲染和延迟渲染的区别

[复制链接]

903

主题

951

帖子

3935

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3935

最佳新人

发表于 2019-3-21 11:27:50 | 显示全部楼层 |阅读模式
前向渲染和延迟渲染是两种光照渲染模式。

假设有1个光源和1000个具有光照反射的三角形在view coordinate沿着z轴正方形延伸摆放,法线与z轴平行,即所有三角形xy全相同,只有z不同,但是这里增加一个条件:摆放顺序是无序的。
从屏幕上其实你只能看到一个带光照的三角形,其他的都被挡住了。
那么前向渲染会这样做:
遍历1000个三角形片元
进行深度检测,没通过的忽略
通过检测的进行光照计算
更新帧缓冲区
返回1继续直到遍历结束
由于上面的要求是无序摆放,那么如果运气差一点 1000次深度检测全部都能通过,那么光照会计算1000次,可是因为只能看见最上面的,那么999次光照计算都是多余的。如果光源越多第三步的重复次数越多,整体复杂度也会越高。
延迟渲染引入了GBuffer,它会这样做:
遍历1000个三角形片元
进行深度检测,没通过的忽略
通过的将坐标、光照等信息写入GBuffer
返回1继续直到遍历结束
遍历Gbuffer
利用Gbuffer中的数据进行光照计算
更新帧缓冲区
返回5继续直到遍历结束
延迟渲染先把可以显示在屏幕上的像素点的相关参数保存下来,然后只进行了一次光照计算就实现了最终效果。这样大大节约了光照计算复杂度。每增加一个光源,只会增加一次整体的光照计算。所以延迟渲染的好处显而易见了。

关注galaxixv,官方微信公众号。
GALAXIX UE4 讨论学习群 140439020
UE4精英学习群  12762592
UNITY学习群   194092348
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


快速回复 返回顶部 返回列表