Unity干货:加速Lightmap烘焙速度的一些小技巧

Unity中的Lightmap烘焙速度一直是经常被人吐槽的一个问题,一个极其简单的小场景使用默认参数时烘焙都要几分钟,而大场景往往要烘几个小时甚至十几小时。

不过Unity的烘焙系统有提供许多可调参数,通过合理调整这些参数能够显著加快烘焙速度。

01、调节Indirect Resolution

这个参数影响的是光照图中间接光的质量,并不会影响最后出图的阴影效果。而这个参数对于效果的影响不大,一般情况下无需调到太高值,在保证间接光质量OK的情况下尽量调小这个值即可。


对于Indirect Resolution的设置建议:


02、调节Lightmap Resolution

降低这个值可以直接减少烘焙时间以及lightmap占用内存,能直接影响最后Lightmap的像素密度而质量降低的代价以阴影质量的降低最为显著。一般建议设为Indirect Resolution的10倍大小。而且这个值越小,最后烘焙的光照图也越小,能够起到节省内存的效果。


另外,对于某些面积较大,或离得较远,不需要很高精度阴影的模型,也可以对它的光照图分辨率进行单独修改,修改位置在Mesh Renderer组件中。

03、调节烘焙模型的数量

减少需要参与烘焙的物体数量,很多细碎的物体并不需要很精确的间接光照效果,而且也可能根本没有足够的光照贴图精度来对应这些细碎物体。


我们可以让重要的物体参与烘焙,而一些不重要的小物体就交给光照探头来解决。极端需求下可以全场景使用光照探头着色。这样就能节省很大一部分内存。

04、调节Reflection Resolution

降低Reflection Probe以及Environment Reflections的分辨率。减少烘焙时间的同时极大降低内存占用。一般建议不要超过256,可以先设置为64,然后再根据效果适当往上调整。


05、减少Realtime UV Charts的数量

这里说的UV Charts不是最终lightmap的UV Charts,而是烘焙过程中生成的间接光Lightmap的UV Charts。这一点可以通过Mesh Renderer组件上的Optimize Realtime UV选项进行优化。


对于那些明显UV Charts太散的Mesh Renderer,我们可以通过勾选Mesh Renderer组件上的Optimize Realtime UVS后调整Max Distance和Max Angle进行修正。

06、控制Cluster的密度

在工程文件夹里新建一个Lightmap Parameters,里面会有一些新的参数Cluster,它的分块数量影响着烘焙的速度。我们甚至可以直接调整它的分辨率。


我们可以通过Scene view中的Clustering模式来可视化Cluster的分布情况,一般来说,这个值可以取0.3-0.6之间。


通过以上所述手段我们尽可能把烘焙的时间流程缩短后,可能会发现某些地方的烘焙质量不够。从原则上来说,速度与质量是两个对立的东西。速度越快质量越差是个不可违背的自然规律。

至于该如何在加快烘焙速度的同时,提高烘焙质量,我们下次再介绍。

本文来源:云和数据,转载此文目的在于传递更多信息,版权归原作者所有。

推荐阅读