Unity的光照烘焙技术摘选

2023-08-04 04:54:17     来源:哔哩哔哩

这篇文章是整理自Unity的技美李万里在unite 2019大会上的光照技术分享,这次分享的内容是

“在Unity的内置渲染管线和轻量级渲染管线LWRP下,如何正确烘焙光照”


【资料图】

虽然已经过去了几年的时间,Unity的发展方向也是逐渐要用URP来替代内置渲染管线,但是个人认为有些内容对URP和HDRP的光照也是具有指导意义的。

procedural skybox:

在Enlighten当中,千万不要使用渐变和颜色进行烘焙,两者烘焙出来的东西会比较风格化,并不写实。有很多人选择用某个颜色烘渐变,但效果会非常不理想,所以一般选择Skybox进行烘焙,而Skybox一般使用Procedural Skybox。

烘焙完后,再替换为自己场景的风格化Skybox作为最终显示效果。Procedural Skybox是仅用于烘焙的,不是用于制作最终的Skybox效果。

我们再举一个简单的例子。如果要形成一个特别颓废和压抑的环境,我们可以将大气密度提到很高,然后将染色降一下,或者偏向一个色彩。

我们可以将整个曝光度调低,把大气密度调高,实现让人很压抑的环境,这种环境烘焙出来的Lightmap比较接近于比较邪恶的地方,从而获得更加压抑的光照效果。

刚开始进行学习的时候,很多人会为了方便去直接用渐变和颜色的方式去进行环境光的设置,但这样简单粗暴的方式会带来误导,不能系统化的去理解整个光照系统,制作不同的场景每次都要通过反复烘焙测试来获得理想的环境光,效率较低。

光照贴图的曝光:

光照贴图的一个问题是,它们做的都是间接光,间接光一定不能将光照贴图曝掉,或者曝光度严重不足。所以我们需要一个间接光的空间去存储这些间接光信息。

如上图所示,如果间接光非常的亮,会导致我们看到的最右侧的图像效果。曝光那么多的时候,间接光贴图就损失掉了。

这一点建议对于初学者来说比较重要,烘焙之后要注意观察光照贴图是否过曝,如果过曝,烘焙出来的GI信息等于都浪费和丢失了,要通过其他方式去提亮而不是一味的加强灯光强度,实际项目中光照贴图过曝的话,在移动平台上还会引起光照贴图显示错误的问题。

正确的烘培:

Progressive烘焙基于光线追踪,发射的一个光子弹射了多少次,弹射时分裂多少光子,再进行弹射。

Progressive的优点是:真实、GPU烘焙、烘培速度快。在同等的模型数量下,Progressive的计算速度比Enlighten快很多。Progressive的缺点是噪点控制比较差,当光子发射量不够时,它无法充满整个场景,因此无法计算出正确的光照。

这部分原文是在对比enlighten和progresssive的区别,通过这些内容,我们可以知道提高progresssive的烘焙精度,主要是要去提高直接采样和间接采样的参数(

Direct Samples和Indirect Samples)

光照和阴影的优化:

移动游戏方面,建议大家使用混合光照技术,效率更高和更为逼真。近景可以使用动态阴影,远景使用Shadow Mask,这样可以降低Shadow Pass的压力。

例如:5-20米是使用动态阴影,远景全部使用Shadow Mask,这样手机平台上既可以获得动态阴影,又可以获得高的性能,不至于手机玩一会儿就会很烫的情况发生。

关于阴影的优化,在项目初期就要有一个合理的规划,使用哪种光照方案和模式,否则很容易在中期因为修改这些标准导致大范围的返工和重制。

我们可以把Systems作为Unity让Enlighten把场景中的部件按照光照和它的距离关系来构建出来一个承接光照的最大单元。我们会看到它的颜色不同,代表是不同的System,这种依存关系决定Enlighten构建的复杂度。

Enlighten会根据使用什么材质,哪个光照对它有影响,它和哪个物体位置比较近,自动构建System。构建得越复杂,计算量也会越多。

Clustering是最核心的Enlighten概念。Enlighten本身光照进行照明是不需要计算的,它计算的是光照环境。所以构建光照环境时,才可以创造这些Clustering。

UV Chart是Lightmap光照贴图的UV,而构建光照环境最核心的东西是UV Chart,如果没有UV Chart,它就没有空间可以存储Clustering作为计算单元。

大场景中对于cluster和charts的优化是必不可少的,通常在烘焙时间过长的时候,需要我们手动去优化这些参数,避免长时间的烘焙影响效率。

光照建议:

现在提供给大家一些光照经验总结,基本上代表了现在光照技术,使用Unity制作移动平台光照时最重要的建议。

首选线性空间作为项目的开发环境,Gamma空间适合之前时代的项目。

在线性空间下,Direction light(主光源)白天强度在之间,夜间月光在之间。

在Gamma空间下,Direction light(主光源)白天强度在之间,夜间月光在-之间。

光照的Indirect强度不能高过直接光的强度,在线性空间下间接光一般小于1。

在Englighten渲染模式下,尽可能的降低植被的Cluster Resolution,提高渲染效率。

静态物体尽可能优化掉不需要烘焙的部分,提高重要物体的Lightmap精度。不参与烘焙的物体使用Light Probe照明。

优化UV Chart,单个物体UV Chart越少越好。

优化不同种类的Cluster Resolution,保证不同种类的物体都有合理的计算分辨率。

混合光照手机平台建议实时阴影距离控制在不超过20米。

使用Unity提供的Procudral Skybox进行烘焙光照贴图。可以获得更真实的Lightmap。

不轻易的调整Unity的Albedo boost和Indirect intensity强度。尽可能的保证Albedo boost =1, indirect intensity=1。

下面是烘培的一些效果,这是可以在移动平台上运行的效果。

标签:

包装