前向渲染和延迟渲染基本概念

前向渲染和延迟渲染基本概念


前言

这一篇是对之前欠的东西,延迟渲染这个东西具体有很多很多值得钻研的东西,这里只是对概念做一个简单的笔记。如果后续再需要深入了解的话,会再另作笔记。


前向渲染

前向渲染是大多数的引擎常用的标准渲染方式。每次遍历几何片元的时候,片段着色器中会先计算光照,之后将片段写入帧缓冲区。但是这样会有很多次的光照计算都是多余的。于是为了减少没必要的光照计算,出现了延迟渲染技术。


延迟渲染

延迟渲染是一种能有效减少光照计算的技术。

在渲染管线中,剔除、Early-Z等技术都是为了减少不必要的计算从而加快渲染流程,而这里的延迟渲染技术也是一样。

通俗易懂地来说,在前向渲染中,对于每个物体,其所占像素都需要进行一次光照的计算;而在延迟渲染中,就好比先把每个物体在计算光照前缓存起来,待所有物体都等着计算光照的时候,统一进行像素的光照计算,这样的话,每个像素就只需要算一遍。

缓存这些待计算光照像素的缓冲区叫做G-Buffer或者叫做几何缓冲区,其中包括屏幕空间深度、表面法线、漫反射颜色、高光颜色和高光因子。(生成G-Buffer的时机是在光栅化阶段?)

G-Buffer被生成后,几何信息可以在光照pass中用来计算光照信息,在光照pass中每个光源都被当作一个几何对象被执行,每个与灯光所表示的几何体相交的像素都使用期望的光照方程进行着色。相比于前向渲染,延迟渲染的光照计算只对每个光源及其覆盖的像素计算一次。

在大量动态光源的环境下,延迟渲染的优势可以很明显地体现出来。


不足之处

首先,延迟渲染需要大量的缓冲区。

其次,在延迟渲染中,只有不透明物体可以被光栅化到G-Buffer,原因是多个半透明对象可以覆盖同一个屏幕像素,而G-Buffer中每个像素只可以存储一个值。在光照Pass中,深度值,表面法线,diffuse颜色和高光色被当前的屏幕像素所采样来进行光照,因为每个G-Buffer只能采样一个值,透明物体不能光照pass中被支持。为了绕过这个问题,透明几何体必须使用标准的前向渲染技术进行渲染,可以限制场景中透明物体的数量或动态光源的数量。只包含不透明物体的场景可以处理大约2000个动态光源而不会发生帧率问题。

再者,延迟渲染只能在光照pass中模拟一个光照模型,这是因为在渲染灯光几何体时只能绑定一个片段着色器。当使用ubershader(把所有的计算都放到一个shader)时,这通常不会是一个问题。然而,如果你的渲染管线在多个像素着色器中使用不同的光照模型,通过切换渲染管线来执行延迟渲染是会有问题的。

还有,由于G-Buffer存的都是像素值,无法体现出每个像素对应的原始模型,也就是说多重采样反走样功能也无法实现。


所以说,如果硬件或环境不支持延迟渲染,却仍存在光照的计算压力该怎么办?可以使用前向渲染 + 静态光照贴图的方式来减小光照计算压力。


Forward+

Forward+也叫基于Tile的前向渲染,即前向渲染和基于tile的灯光剔除相结合的渲染技术。

Forward+渲染的第一个pass将灯光划分到一个个的小格子中(tile),第二个pass是使用标准的前向渲染来对每个物体进行着色。如此做,相比起普通的前向渲染,每个物体所需要迭代计算的光照少了很多(这就是所谓的通过灯光剔除减少计算),可以给性能带来明显的提升。


Pass

在图形学中常说的Pass,指的就是一个操作,即用来执行渲染技术的某一步骤。比如,不透明Pass指的是迭代场景中所有对象,渲染其中所有不透明的对象。

前向渲染通常只有两个Pass,即不透明Pass和透明Pass;

延迟渲染通常包含三个Pass,几何Pass、光照Pass和透明Pass;

Forward+也包含三个Pass,灯光剔除Pass、不透明Pass和透明Pass。


小结

概念差不多就是这些,具体细节还需继续学习。不废话,学就完事了。


参考

https://gamedevelopment.tutsplus.com/articles/forward-rendering-vs-deferred-rendering–gamedev-12342

https://www.jianshu.com/p/0994555aefb5

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值