ue4多个关卡怎么构建光照_游戏引擎中的光照算法

d231fedccb03cc3c8022b63eac786bff.png

前言

今天我们来聊一下游戏引擎中的光照算法,从最开始的Forward Render,到后来的Deferred Render再到后面的Clustered Forward Render以及Clustered Deferred Render,分析一下实现步骤以及它们的优缺点。

Forward Render

这个是最传统的方法,对于多光源的处理比较有限,它的基本算法如下所示:

b74212ee7606a9cc5f7bee5570bf1e1d.png

一般游戏引擎为了减少批次和处理光照的次数,会让每个物体受影响的光源有个上限比如3个或者4个,而且一般是在一个shader里面直接处理多个光源的情况。这个在最开始的游戏引擎中比较常见。目前基本上只会使用在移动平台上。比如Unity和UE4移动平台的低配版本都是这样的。

043c2f2a1d110265e498964b768a41e3.png

Deferred Shading

随着游戏中支持光源的数量越来越多,传统的Forward Render已经不能满足游戏的需求,Deferred Shading应运而生,这个技术基本上是从Deferred shading in S.T.A.L.K.E.R. 进入大家的视野的。基本思路如下图所示:

9e554e368f664bb5eae04bf67b6110e0.png

8a6942141dce8f3110cf1554d38eb65f.png

基本上GBuffe的内容大体如上图所示,当然目前大多数引擎为了支持多材质一个会有一个字节用于写入Material ID或者Shading Model ID(UE4)来区分不同的着色模型。

Tiled Deferred Shading

Tile Deferred Shading就是在Deferred Shading基础上按一定像素大小分块(比如32x32),计算每一块中光源的数量,这样我们可以对多个光源计算光照只读取一次GBuffer信息,节省了带宽。

2716fbd718dbb61dd82e0264d7e1a875.png

cffb552d0e513ff3d4c9a8fd0b2cfc30.png

Deferred Lighting

Cryengine3早期版本中使用过该技术,大体算法如下图所示:

6f1ac8bea56b33aff71cd7e771e290a5.png

这个算法跟Deferred Shading差不多,目前基本上没有引擎再使用这个方法。

Forward Plus Shading(Tiled Forward Rendering)

Forward+ Rendering最初是从AMD的论文Forward+: Bringing Deferred Lighting to the Next Level开始流行起来的。基本算法如下图所示:

4b4c49c97b3b09ab93919c04b66d0406.png

281413199b868487bf442fd29b7d75bc.png

0af38a6b4970e1ab17c3f129a11036dc.png

cffb552d0e513ff3d4c9a8fd0b2cfc30.png

Clustered Forward Rendering

在Forward+ Rendering的基础上又沿着相机深度的方向切了很多片。

a50c22857fb2781123a9f4d6db7d00d7.png

c47922f63e34b3e3c192703d34ec725b.png

ca41ee79ac982327ec8dbe01a9cd5ecc.png

dedbfc9f7a145f9202c1612753070b2d.png

Clustered Deferred Rendering

Clustered Forward Rendering也即是在Tiled Deferred Rendering的基础上又沿着相机深度的方向上进行了切片。

cada3c28f48a798fa2dbdebf6b096d5c.png

切片算法

4803835d55938b28b99471a0584c47e0.png

b6b65469adf58d954b6cf89b3856799a.png

fafee970c7cee79e4d0bc00260da147d.png

47cc189051eedb33ddfc7a1890a45637.png

cffb552d0e513ff3d4c9a8fd0b2cfc30.png

cffb552d0e513ff3d4c9a8fd0b2cfc30.png

9ef2b39e99fd669e2a5af51b8e3801f5.png

5110315039c0318c05c50ad56a6ec8bd.png

总结

到这里我们把基本的光照算法都讲一遍了,读者可以看到上面的这些光照算法无非就是下面的几种组合:Forward/Deferred + (Tiled/Clustered)?,这里?代表0或1。演进过程是这样的,最开始只有传统的Forward Rendering,为了解决多光源的问题,引入了Deferred Rendering,带来了很多好处,包括各种后期效果。但是带宽是个问题,于是出现了Forward Plus(Tiled) Rendering解决带宽问题,也就有了Tiled Deferred Shading,但是还可以进一步优化,那就是在Tile的基础上再切片,于是就有了Clustered Forward Rendering和Clustered Deferred Rendering。下面我们列个简单的表格来对比下他们的优缺点。

8e61a789d7d43588df1a961256ec155e.png

从上表可以看出,这些算法的优缺点基本就是Forward/Deferred以及Tiled/Clustered优缺点的组合。

参考文章

1. http://download.nvidia.com/developer/presentations/2004/6800_Leagues/6800_Leagues_Deferred_Shading.pdf

2. https://www.slideshare.net/guest11b095/a-bit-more-deferred-cry-engine3

3. GPU Gems

4. Clustered Forward vs Deferred Shading

5. Lighting in Crysis 2

6. GDC Europe 2013: Shining the Light on Crysis 3

7. GPU Gems

8. https://takahiroharada.files.wordpress.com/2015/04/forward_plus.pdf

9. Forward+ Rendering

10. https://www.slideshare.net/takahiroharada/forward-34779335

11. http://www.cse.chalmers.se/~uffe/clustered_shading_preprint.pdf

12. http://www.humus.name/Articles/PracticalClusteredShading.pdf

13. Forward+: A Step Toward Film-Style Shading in Real Time -- GPU Pro 4

14. Cluster Forward Rendering and Anti-Aliasing in 'Detroit: Become Human'

15. http://www.dice.se/wp-content/uploads/2014/12/GDC11_DX11inBF3_Public.pdf

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值