1.加快烘焙速度
Unity中的Lightmap烘焙速度一直是经常被人吐槽的一个问题,一个极其简单的小场景使用默认参数时烘焙都要几分钟,而大场景往往要烘几个小时甚至十几小时。不过Unity的烘焙系统有提供许多可调参数,通过合理调整这些参数能够显著加快烘焙速度。
讲师提到的第一个影响因素是Indirect Resolution,这个参数影响的是光照图中间接光的质量,它不影响阴影质量。Unity中的GI包括Realtime GI和Baked GI两种,而Baked GI是基于Realtime GI的计算结果进行进一步的计算。在第一步的计算中,需要对所有模型的表面进行分块/聚类(Cluster)操作,把模型体素化,表面分成一个个格子,再基于这个格子进行间接光照的计算。Indirect Resolution越大,Cluster数量越多,格子越密集,计算就越慢。而这个参数对于效果的影响不大,一般情况下无需调到太高值。
对于Indirect Resolution的设置建议:
室内:2-3 texels per unit
室外:0.5-1 texel per unit
大型地形:0.1-0.5 texel per unit
(然而它的默认值是5...)
第二个影响因素就是大家耳熟能详的Lightmap Resolution,它影响的是阴影质量及最终烘焙得到的贴图大小。对于它的优化也很简单,减就完事儿了,越减越快。而这里的设置建议是,将该参数大小设置为Indirect Resolution的十倍,在shadow使用distance shadowmask模式时,这个值甚至可以更低(因为近处的阴影都使用了实时阴影)。而且这个值越小,最后烘焙的光照图也越小,能够起到节省内存的效果。
(然而在Unity里,它的默认值甚至达到了40)
以下为我毕设中的一个场景全貌,这个场景在上面的参数下烘焙得到的贴图正好是一整张2048的贴图,甚至还有剩余,效果还算可以接受。