ue4 改变枢轴位置_UE4渲染模块概述(五)---静态光照

在上一篇中介绍了反射:

Jerry:UE4渲染模块概述(四)---反射​zhuanlan.zhihu.com

同反射一样,光照和阴影在实时渲染中是很难计算的。因此如方法论中介绍的,能预计算的就尽量预计算,能用空间换时间的就尽量换。静态光的光照/阴影都是可以预计算的,动态光则需要实时计算。

本章讨论的是静态光照/静态阴影。静态光是指光源本身不会移动,且不会随游戏进程改变状态。静态光/阴影是在编辑器里预计算的,它们被存储于光图(lightmap)里。

使用光图的优点如下:

(1)不需要运行时计算,节省性能;

缺点如下:

(1)需占用不少内存

(2)预计算的时间较长,每移动一个物件,都需要重新build lightmap

(3)非常大的模型可能会没有足够的空间存储lightmap

这里看上去缺点很多,但都是预计算、以空间换时间必须要付出的代价,只要是运行时性能省下来了,就还是值得的。

lightmap光照贴图本质上就是一张纹理,是一张烘焙有光照和阴影信息的图片,类似于纹理的UV采样,我们也会对存于模型上的光照UV坐标进行采样,将采样结果乘以固有色basecolor得到有光照的渲染效果。图示如下:

1a797d5eae9f3edbd1f777d73230ef90.png

在UE4中,会把许多光照贴图打包到一起,类似于下面:

c230005ff4c02c8adf2478fe6fad4269.png

我们可以在worldsetting里面看到这些打包好的光照贴图,但不可修改它们。

我们用LightMass来生成光照贴图,可以配置所需要的贴图精度,分散在两个地方:

(1)build光选项里面的光照质量,如preview,high,productive

(2)worldsetting里面的lightmass选项,如下图:

e60691669efabb8e1f9d804f6329adfa.png

对于一些想要高精度lightmap的地方,可以放置一个光照重要性体积(light importance volume),UE确保体积内的任何东西都有更高质量的光照 (如战斗区域),而体积外则使用低质量光照(如人物移动不到的远景)。需要注意的是,光图的精度主要影响的内存与文件大小,而不是帧率。

对于光图的制作/烘培过程,我们可以通过下面的方法来提升烘焙速度:

(1) 降低光图分辨率

(2) 减少灯光或场景内物件数量

(3) build时仅使用preview方式

(4)灯光设置较小的衰减半径与光源半径(即使光影响范围小)

在编辑器里,可以查看光图的密度:

bfbde4bbe574b7c1a355ea93e48c7d6c.png

选中后编辑器内的效果如下:

09b510cdfd0e49605258e21745342920.png

方格越小,颜色就越绿,这表示光照贴图精度越高。对于一些镜头不常看到的地方(如空中的立柱),建议使用低细节度的光照贴图即可。

光图主要是针对直接光生成的光照纹理,对于因多次反射产生的间接光,UE是使用了一种称之为Indirect Light Cache(间接光照缓存)来进行处理。特别是对于移动中的物体(比如说游戏角色),间接光照缓存的光照信息能弥补lightmap的不足。UE4采用了布置采样点方式来生成间接光照缓存,如下图所示:

1e4e32356b0a565aed9758d5333ce7fa.png

灰白色的点即为采样点,对于任何物体,都会找到离它最近的采样点,查询到它的亮度信息,然后将采样结果与物体自身颜色进行混合。可以选中物件,在下图位置找到间接光的配置项:

0505286f479b910ad0024bfbdcc331a5.png

下拉菜单有三项可选:不使用采样点,使用采样点,使用采样体积。使用采样体积是指选用更多的采样点,比如周围5*5*5个点来计算间接光照。

间接光照缓存是在build lightmap同时做的,采样点会在lightmass importance volume范围内生成,可能会超出一点点。需要注意的是,采样点不是等密度的,一般来说地面的采样点多于空中的采样点,如果想要在空中也有较高密度的采样点,可以创建一个Lightmass Character Indirect Detail Volume(Lightmass角色间接细节体积),如下:

74aeed57026e220e7ecc2230a81854b3.png

在worldsetting这里可以配置采样点的生成密度:

7841d289e0d00d4fe6dc4983ff7815d1.png

配置好就可以在空间也获得比较好的间接光质量了,如下图:

b0f1ff363ee66b99cf01231d850f4dc7.png

关于静态光的lightmap与Indirect lighting cache就介绍到这里,下一部分会介绍动态光照:

Jerry:UE4渲染模块概述(六)---动态光照​zhuanlan.zhihu.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值