在Unity的光照烘焙技术(上)中,Unity技术美术李万里介绍了Unity的光照系统。本文将介绍如何使用Unity的Progressive工具去正确的烘焙光照以及设置一些光照。
演讲内容
我们谈了很多光照烘培的内容,但也要考虑到烘培的代价是非常高的。
如果我们烘培一个地图,整个场景不可能都是Box垒起来的,还有大量的物体。如果这些物体全部都要烘培,需要有很强的电脑和集群服务器进行渲染。
我们还面临一个问题:烘培贴图的数量和体积非常的大,因为它是RGB通道的一些彩色图片,所以是无法改变的。
我们只能通过格式压缩,但压缩会出现质量下降的情况。贴图加载会占用大量的显存,所以优化整个光照很重要。
Unity提供了两个非常重要的功能:Light Probe和Light Probe Proxy Volume,二者可以配合使用。Light Probe是球形光照,提供比较简单的间接照明,可以为小物体提供间接光。
如果游戏场景在室外,像一些植被,草和小型岩石可以不用烘培。因为它们虽然很小,但是整体的数量是很庞大的。尤其是一些小的细节,如果精度不够,烘培的效果会非常差。
如上图所示,Light Probe Proxy Volume用来给这个小火车进行间接照明,它上面的这些点可以吸取左侧Light Probe上离它最近的值,它会在几个球之间进行颜色的混合,混合出一个符合小火车形状的间接光的体积。尽管本身小火车没有进行光照计算,但它也拥有了间接光。
Light Probe Proxy Volume目前不支持移动平台,它只支持一些PC或主机平台,之后我们可能改进,支持移动平台。
大家可以按照项目的情况,正确的使用可以缩减Lightmap的数量和烘焙时间,提高效率。人物和车辆这类动态物体,一定是使用Light Probe进行照明。
用于结构复杂的小物体,满足下列需求即可:
结构复杂,单体部件表面起伏过大,UV复杂的物体。尤其在Enlighten中计算的时候,因为复杂性是难以逾越的障碍。
体积小,不显眼的。例如:镜框和电线杆。
不重要的,并非游戏场景的重要部件。例如:一块80%埋在地下的岩石。
树和植被也使用Light Probe照明,因为Enlighten对树和植被也非常的不友好。
Lightmap优化方面,可以大量使用Light Probe,从而优化掉1/3到1/5的Lightmap数量,加速烘焙时间,使烘焙测试的时候更加流畅,不必等待太长时间。
如下图所示,这张图是用Enlighten烘焙的。说到Enlighten,不得不提Enlighten最核心的三个概念:Systems、Clustering、UV Charts。
我们可以把Systems作为Unity让Enlighten把场景中的部件按照光照和它的距离关系来构建出来一个承接光照的最大单元。我们会看到它的颜色不同,代表是不同的System,这种依存关系决定Enlighten构建的复杂度。
Enlighten会根据使用什么材质,哪个光照对它有影响,它和哪个物体位置比较近,自动构建System。构建得越复杂,计算量也会越多。
Clustering是最核心的Enlighten概念。Enlighten本身光照进行照明是不需要计算的,它计算的是光照环境。所以构建光照环境时,才可以创造这些Clustering。
UV Chart是Lightmap光照贴图的UV