本文使用Unity5.x版本,由于Unity4.x到Unity5.x更换了光照引擎,所以本文内容只适合于Unity5.x版本
本文向大家介绍Unity烘焙动态光照来实现光源优化
什么是动态光源?
Unity灯光默认是实时光照,也就是说物体在灯光下不同位置产生不同灯光灯光效果
什么是烘焙动态光源?
由于动态光源在实时光照下会大量的Setpass Calls(Draw Calls)
为了减小Setpass Calls,我们烘焙动态光源
将该场景灯光效果烘焙,原理是Unity为我们自动生成光照贴图
这样大大减少了Setpass Calls
接下来我详细介绍下,在Unity实现烘焙动态光照
新建场景,在场景中创建如下对象
下图是对象结构列表
此时我们运行游戏,发现Setpass Calls比较大(手游一般控制在60一下)
我们目标是烘焙光照贴图,实现减少Setpass
我们将Cube设置为静态对象(烘焙贴图)
选中全部点光源,将Baking选择为Baked
Realtime: 实时(默认)
Baked: 烘焙
Mixed: 混合
打开Window->Lighting
勾选中Baked GI
点击Build烘焙(也可以勾选Auto,自动更新)
此时在Lightmap窗口中会发现已经生成了光照贴图
此时运行游戏观察Setpass Callls发现大大减少
细心的同学可能发现,烘焙后的场景“变亮”了,无伤大雅,因为用户在体验游戏不会感觉出来有什么不一样
但是实现了烘焙,会场景中的主角不再受到光照影响
这是因为我们此时是光照贴图影响这场景的显示,灯光不再实时光照了
有什么方法可以解决呢?
接下来介绍Light Probe Group(探针)
Light Probe Group作用是记录该位置光照信息
按下图创建Light Probe Group
创建多个探针
重新烘焙(勾选了Auto下不需要)
此时在减小了Setpass Calls情况下依旧可以“实时光照”,达到优化目标效果
Light Probe Group的位置摆放的好话,基本可以达到和实时光照效果一样
如果本文对你有帮助,请多多支持,干货满满!!!
在之前很多小伙伴在做游戏优化时发现,为了使摄像机没有看到的部分隐藏起来达到
但是使用勾选了摄像器的Occlusion Culling属性还是无法实现目标效果
这是因为只是赋予了摄像机具有遮挡剔除功能
具体怎么实现遮挡剔除还需要自己手动操作,步骤如下
在下图我为了测试,在场景中做如下游戏对象
将能被遮挡的游戏对象在Inspect属性面板上设置为静态(Occluder一定要勾选,其他可以不勾选)
接下来打开Wndow->Occlusion Culling,最后烘焙下
最后测试下,检测是否达到预期效果
调节摄像机位置,发现球体不在摄像机视野范围或则被其他静态球体遮挡住的话讲无法显示