赞
踩
很多刚刚接触Unity3d的童鞋花了大量的时间自学,可总是把握不好Unity3d的烘焙,刚从一个坑里爬出来,又陷入另一个新的坑,每次烘焙一个场景少则几个小时,多则几十个小时,机器总是处于假死机状态,半天看不到结果,好不容易烘焙完了,黑斑、撕裂、硬边、漏光或漏阴影等缺陷遍布,惨不忍睹,整体效果暗无层次,或者苍白无力,灯光该亮的亮不起来,该暗的暗不下去,更谈不上有什么意境,痛苦的折磨,近乎失去了信心,一个团队从建模到程序,都没什么问题,可一到烘焙这一关,就堵得心塞,怎么也搞不出好的视觉效果,作品没法及时向用户交付,小姐姐在这里分享一些自己的经验,希望能帮到受此痛苦折磨的朋友,话不多说,开工!
哦,对了,忘了交代一点,很多朋友总是喜欢追高版本的unity3d软件,以为高版就一定很好,目前最高版是Unity3d 2020,有人就迫不及待地下载使用,很多人用的都是破解版,如果没有经过验证,就草率地用于实际项目,如果软件有问题,后果不堪设想。有几个读者用2020版,项目完成发布的时候,问题来了,启动界面logo图标更换没有完全破解,使用官方的Logo,3D眼镜浏览的时候特别晕,如果可以更换个Logo,就可以上传自己制作的抑制眩晕的Logo,当然还有很多别的问题,总之,希望大家使用经过小姐姐通过实际项目制作验证的版本,绝对不敢冒然选用最高版。这里建议大家使用Unity2019.3.13f1版.unity3d共有三个版本标识,alpha、beta、final,其中alpha是公认的内测版,也就是内部测试版,很多代码都有问题,beta版是公测版,也有不少问题,final版才是最后的正式版,alpha版一般简写为a,例如unity 2019.1.1a8(64-bit)、Unity 2019.2.0a4,这两个版本都是测试版,如果版本标识中有字母b,就是公测版,也不能下载使用,只有带 f 的版本才能用于项目制作,所以现在最高只能使用2018版,很多老司机还在用5.6版,一般都不追高版。
本文和大家一起探讨的实例效果截图(后续会不断更新):
干活!
● Unity日景烘焙
首先小姐姐以著名的斯蓬扎宫模型场景为例,和大家一起探讨一下正午时分的光影布光方法及烘焙过程。3dMax模型情况如下图所示(由图可见,模型的面数为6万多(见截图左上角),模型一定要采用精简的单面建模,否则这个场景的面数会多达几百万,甚至上千万的面,如此多的面数,Unity是吃不消的,无论烘焙过程的展UV,还是烘焙,甚至烘焙之后的场景运行,都会陷入无休止的等待、假死机和卡顿状态,毕竟烘焙之后也会个场景带来一些负载,而且最终作品要在用户机器或手机上运行,所以从模型的面数方面,必须充分考虑给场景留出足够的裕度)
1. 模型导出
无论你用3dMax、Maya、C4D、Blender或Sketchup建的模型,建议都以fbx格式导出,因为Unity3d对fbx格式兼容的最好,这也是官方的建议,导出时一定要勾选“EmbedMedia”(嵌入媒体),否则在导入Unity时会成为无贴图的“裸模”
2. 模型导入Unity
⑴ 在导入模型前,按下图所示,勾选掉Unity3d的“Auto Generate”(自动烘焙)选项,好多人一打开Unity3d,不知道怎么啦,总感觉系统处于运算状态,就是因为Unity默认这个选项是勾选的,当导入模型后,什么还没做,就一直陷入莫名的忙机,也是这个原因,所以导入前取消这个选项。
⑵ 按下图所示将刚才从3d软件导出的FBX模型拖入Unity3d的Assets文件夹,2017版之后,可能出于别的考虑,Unity不再直接导入材质和贴图,所以很多人发现模型导入后总是无材质和贴图的裸模,这里还需要做一点设置,看下一步。
⑶ 选中刚导入的FBX模型,点击inspector面板的Materails按钮,我们发现下面的所有材质都显示“none”,这就是裸模的根源,有童鞋说,前面不是说导出FBX时不勾选“Embedmedia”选项,就会出现裸模,这都勾选了,怎么还是裸模呢?这里需要说一下,如果前面不勾选,这里一定是裸模,但是,勾选之后,还需要一点点设置,否则依然会裸模,也就是前面和现在的设置缺一不可。
⑷ 继续,此时拉开“location”后面的下拉框,将设置改为第一项,也就是“use external materails(legacy)”,意思是使用外部材质,如下图所示:
⑸ 接下来还需要将“naming”后面的下拉框改为“from model‘s materails’”,如下图所示,意思是贴图名称取自模型材质,然后点击下面第二张图中所示的“apply”(应用)按钮,这时unity就稀里哗啦地将所有材质和贴图真正导入Unity。
⑹ 导入材质和贴图后,unity的assets文件夹中会多出“materails”和与FBX同名的后缀为".fbm"的两个文件夹,一个存放的是材质,一个用来存放贴图,如下图所示。
⑺ 接下来将assets中的FBX模型拖入“Herarcy(层级面板)”,此时我们可以看到,FBX模型连同材质和贴图被完美地导入了Unity,如下图所示。
到此模型导入完毕,从下面的图可以看到,在unity3d默认灯光的照射下,场景看起来很苍白,没有一点层次,你的作品功能再强大,场景没有出色的视觉美感,所有功夫全白费,受众是不能接受这样的作品,这就是烘焙的重要意义!考虑到一些童鞋导入模型都成问题,所以前面啰嗦了一堆,熟悉的童鞋可以跳过。接下来就进入unity3d烘焙的正题。
3. Unity3d场景布光及光照参数设置
无论是游戏,还是VR场景,烘焙前首先要做的事是灯光的布设,因为烘焙的主要任务是渲染灯光的光影效果,没有灯光,烘焙也就无从谈起。unity3d的布光原则,和其他3D软件并无二样,也就是要根据所要表现的意境和气氛来决定如何打灯。一开始我们就说要烘焙正午时分的场景,下面我们就按正午时刻的光照来布设灯光。大家都知道,正午时分,阳光明媚,光照明暗分明,太阳光近乎垂直投射,但是,这个场景只有顶部一个可进光的开口,其他部分都是密闭的,表现正午的气氛,如果灯光垂直向下投射,阴影会与场景物体重合,所以我们不能垂直打灯,因此将灯光调至与地面夹角大约60-80度,合理的灯光布设是场景光影出彩和营造气氛的先决条件,不同的时间段,灯光角度不同。
⑴ 下面我们用平行光来模拟太阳光,作为主光源(照亮场景的主要光源)照亮场景的部分区域(也就是迎光面),产生光斑,与此同时,在其他区域产生阴影。照亮区和阴影区必须形成强烈的反差,才能显示出阳光的明媚,很多人烘焙的场景平淡,就是因为明暗对比不强烈,该亮的不亮,该暗的不暗。非洲人之所以看起来牙齿很白,是因为黑色脸部的衬托所致,因此要表现优秀的阳光效果,光照明暗反差要大,但暗区也不能死黑一片。Unity一创建新的场景,就默认为我们创建了一盏平行光,现在我们将其调至如下图所示的投射角度,既要考虑让一二层都有阳光投射的痕迹,又不至于灯光垂直入射。
⑵ 接下来选中平行光(Directional Light),将inspector面板中的灯光强度(intensity)调至2,如下图所示,默认值是1,很多人马上说灯光已经曝光了,但必须调大,因为我们最终要的是烘焙光照,不是实时光照,现在只是实时光照曝光了,因为烘焙光照的算法和实时光照不同,不调大,烘焙后阳光不够强烈。另外,顺便将灯光的模式“Mode”改为“baked(烘焙模式)”,如下面第二张图所示。其他值
⑶ 主光源设定之后,我们还需要考虑阴影区域的照亮,虽然阴暗区相对照亮区较暗,但也不能有伸手不见五指的感觉,正午阳光充足的时候,在强光的照射对比下,阴影区会显得比较暗,但物体还是能看清,而且有层次感的,这主要是天光的贡献,因此我们需要开启Unity的天光作为辅助光源来照亮阴暗区域,与此同时,主光源照射到迎光面后,反射到周围的物体上,这些物体又作为二次光源照亮其他物体,多次反弹后到达阴暗区,也起到光照的作用,因此,这个场景的辅助光源除了天光,还有主光源-太阳光多次反弹光,或者说两者的综合效果作为辅助光,共同照亮阴影区。现在我们打开光照面板,点击window/lingting/settings,如下图所示,弹出光照面板,然后按下面第二张图所示,将光照面板的标签拖至inspector面板标签之后,使其和inspector面板并排,这样节省屏幕空间,如下面第三张图所示。
⑶ 接下来将光照面板(Lighting)下场景(Scene)标签中的环境反射(Environment Reflections)的反弹次数改为5,这个值越大,光线会充分传递到阴暗区,亮度越亮,但亮度不会超过照亮区。然后将实时光照(RealTime Lighting)下实时全局光照(RealTime Global ILLumination)后的复选框取消勾选,也就只进行烘焙全局光照计算。接着将混合光照(Mixed Lighting)的光照模式(Lighting Mode)后的下拉框中的选项改为烘焙间接光(Baked Indirect),最后再将光照贴图设置(Lightmapping Setings)下的光照运算器(Lightmaper)后的下拉框选项改为渐进式(Progressive),如下图所示。还需要勾选环境遮蔽(Ambient Occlusion),也就是AO,如下第二张图所示,这个选项会在物体或物体间内转角或内转折处产生软阴影,例如墙内凹角,对于表现细节很有帮助。至此场景的辅助光和光照参数就设好了。
4. 烘焙模型设置
做完以上的设置之后,还需要对模型进行必要的设置。选中层级面板中所有需要烘焙的模型物体,勾选Inspector面板右上角的Static,将所有物体设定为静态,如下图所示,否则烘焙之后没有阴影和任何效果,切记!然后在assets面板中,选中导入的所有FBX模型,勾选inspector面板模型(model)下的创建光照贴图坐标(Generate Lightmap UVs)复选框,如下第二张图所示,否则烘焙后,模型会遍布黑斑,其实是光照图错乱,因为没有贴图坐标,光照图不知道怎么贴。
5. 烘焙
完成上面的设置,就可以进行场景烘焙了。点击下图所示的“Generate Lighting(生成光照)”按钮,即可开始光照烘焙
说明:最近Unity2019版的正式版发布,由于一直在测试破版的稳定性,所以到现在才更新,请童鞋们谅解!下面就改用2019版来和大家继续探讨Unity3d的光照烘焙。
接上面的步骤,烘焙完成共耗时7.5分钟,且无任何报错提示,如下图所示:
下面从不同角度来看看烘焙的效果,由下列截图可见,烘焙成果非常干净,未见很多童鞋所说的黑斑、白斑、麻点、漏光、漏阴影、撕裂、破面、硬边等现象,而且烘焙速度非常快。一般情况下,最终的正式渲染烘焙,很多人都得1,2个小时,大部分没经验的童鞋,得5,6个小时,甚至几十个小时,还有的童鞋陷入了无休止的死机状态。无论质量好坏,有的童鞋想看一眼效果,一时半会都看不到,搞得非常心塞。前面说过,我们此次的目标是烘焙正午时分的光照效果,大家看看有没有正午的效果?小姐姐个人认为,整个场景明暗对比强烈,阴暗区域虽然很暗,但是层次还是很清晰的。
我们再来看看细节效果
下面我们用视频看看烘焙的效果
6. 没经验的初学者烘焙的情况
初学者或者没经验的童鞋,将烘焙参数设的稍高一些,即如下图所示,将”Bounce(反弹次数)“设为4,Lightmap Resolution(光照贴图分辨率)”设为20,“Lightmap Size(光照贴图尺度)”设为2048,烘焙时屏幕右下角的ETA(剩余时间,也就是烘焙完成需要的时间)一开始显示为3个多小时,然后不断增加,甚至几十个小时,经历漫长的等待之后,直接心理奔溃,明明做个简单的例子烘焙挺快的,为什么一到实际项目就让人这么心塞呢?
这些童鞋不甘心,又降低烘焙参数,如下图所示,将”Bounce(反弹次数)“设为1,Lightmap Resolution(光照贴图分辨率)”设为10,“Lightmap Size(光照贴图尺度)”设为2048,烘焙时屏幕右下角的ETA(剩余时间)为1个多小时,同时状态栏提示“There are 5 objects in scene with overlapping UV’s…(场景中有5个物体UV坐标重叠)
烘焙的结果惨不忍睹,劣迹斑斑,仿若火灾之后的情景,如下图所示,
童鞋们常见的烘焙缺陷就不再一一列举了,那么为什么小姐姐使用很高的烘焙参数,完成高品质烘焙只用了7.5分钟,而童鞋们使用稍高点的参数就陷入了无休止的假死机?甚至把参数降得很低,烘焙都比小姐姐花费的时间多的多,而且烘焙的质量还非常差呢?对于小姐姐不到8分钟的高品质渲染烘焙时长,很多童鞋有点大跌眼镜,似乎不大相信,因为自己从来就没有在几分钟内完成一个场景的烘焙,而且还需要一次又一次的反复测试,每次都有各种问题,一出现问题,就一头雾水,不知道如何排除,即使等待漫长的时间有了结果,也是黑斑、白斑、漏光、漏阴影、破面、亮边、硬边等现象严重,搞得都失去了信心,下面就烘焙超慢以及烘焙过程出现的问题分别进行深度分析,仅为小姐姐个人的观点,请高手砖拍。
7. 烘焙渲染超级缓慢的原因分析及解决方案
⑴ 模型面数超高是Unity3d烘焙超慢的罪魁祸首
大家都知道,光照烘焙的实质是将模型的每个面上所受光照渲染到其展开的对应UV区块上的过程,大家可以自己试验一下,在自己熟悉的3D软件中创建一个简单的立方体和一个面模型,然后导入Unity3d进行烘焙,速度会非常快,但是当复制10万个立方体,再导入Unity3d烘焙的时候,速度就非常慢,由这个简单的例子可以得出结论,模型的面数越多,烘焙所消耗的时间越长,所以降低模型面数是加速烘焙的首选方案,换言之,模型面数超高是造成Unity光影烘焙缓慢的主要原因,也就是在保证模型外观不变的情况下,应尽可能地降低模型面数。
很多童鞋之前从事效果图或3D动画,转入VR之后,仍然沿用效果图和动画的建模习惯,将每个面建的很精细,很光滑,即使模型规模再大都不用担心,因为这些童鞋的机器配置都很高,但是VR不同于效果图和动画,效果图和动画最终作品只需给用户提交几张图片或视频(图片序列),而VR最终作品是要给用户提交一个能够在配置不高的用户机或手机上实时运行的3D场景文件,所以制作VR或游戏作品,无论你的机器配置多高,都应尽可能优化场景模型面数。模型面数不仅影响烘焙速度和质量,同时也影响最终作品的实时运行效率。
简单地说,VR和游戏建模,应放弃传统的实体建模习惯,改用精简的低面数最优化单面建模方法,也就是poly(多边形)建模,这样才能有效降低模型面数。对于使用3dmax建模的童鞋,如果不会使用单面建模,可参看小姐姐编制的《基于Unity3d的3dMax低面数精简单面建模实战视频教程》,支持小姐姐的《Unity模型预处理布光烘焙后处理特效美工场景优化实战视频教程》,赠送你基于Unity3d的3dmax低面数精简单面建模实战视频教程,希望小姐姐的教程对一些童鞋大幅降低模型面数有所帮助。具体如何构建模型,就不赘述了,这里只给出一些原则,也就是在保证模型外观的前提下,应尽可能降低曲面光弧度(段数),一些细节采用贴图来表现,如下图所示:
有些童鞋认为曲面精度太低,看起来太粗糙,大家看看上两图所在位置经过烘焙后的效果,由图可见,虽然降低了曲面精度(光滑度),烘焙后并不失真。
另外对于护栏、铁艺、女儿墙之类比较费面的模型,可采用镂空贴图来表现。踏步较多时,也可采用贴图表现,门窗之类也用贴图,这样就可以大幅度降低模型面,如下图所示:
⑵ 模型交叉也是导致烘焙渲染超级缓慢不容忽视的因素
有的童鞋非常偏执,不愿意用单面建模方法,说自己的模型面数并不高,可渲染烘焙还是很慢,原因是他的场景中有很多下图所示的模型交叉(或穿插)结构,烘焙时会计算图中所示的2处阴影和AO,大家都知道,烘焙的过程中阴影计算是最耗时的,不合理的建模,会让系统花大量时间计算无意义的阴影,如果采用单面建模方法改造成如下第二张图所示的结构,只需计算一处的阴影,如果类似的这种交叉结构在场景中大量存在,烘焙肯定会很缓慢。而在改成单面模型后,烘焙会大幅加速
⑶ 面重叠(Overlapped faces)也是导致烘焙渲染缓慢的重要因素
一些童鞋确实使用poly单面建模构建的场景,但是由于疏忽或误操作,一些顶点未被焊合,或其他原因,造成很多重叠的面,从外观上看,都是单个的面,而实际在这些面的后面重叠了好多面,这些面在烘焙渲染过程中,都会被展开,并要一一被烘焙,而实际后面重叠的面都毫无意义,白白花费了很长时间在烘焙无用的东西,所以建模完成后,应排查重叠面和重叠的顶点。关于重叠面后面会进行图解。
⑷ 不合理的lightmap UV布局将大幅增加烘焙渲染时间
由于Unity3d自带的lightmap UV’s拆分(展开)算法的硬伤,在指定的UV尺度下,物体的光照UV常常集聚在一张lightmap的局部区域,使大量的UV空间白白浪费,如下图所示。为了增大UV所占的比例,很多童鞋通过增加下面第二张图中的“Scale in Lightmap”参数反复测试,时间都花在了一次又一次的测试中,少则几个小时,多则几天,得不偿失。而且当增加“Scale in Lightmap”参数时,原来一些UV区块又相应缩小,为了让所有的UV区块都增大,每个物体的“Scale in Lightmap”都得增加,此时烘焙时间成倍剧增。原本想让所有UV区块占满一张lightmap,可是unity并不听使唤,不仅没有充分利用lightmap有效空间,而且又增加了lightmap的数量,每张lightmap和刚才那个lightmap一样,都浪费很多UV空间。经过多次长时间的烘焙测试后,烘焙缺陷虽然消除了,可lighmap所消耗的内存空间惊人,这给作品后续的实时运行增加了很大负担。因此不合理lightmap UV布局也是导致烘焙缓慢的重要因素。所以小姐姐强烈建议不要使用Unity3d自带的Lightmap UVs展平功能,也就是不要勾选下面第三张图中的“Generate Lightmap UVs(自动展平Lightmap UV坐标)”,不勾选这个选项则系统会利用建模软件中拆分(展平)的通道2中的UV坐标。这个数据保存在FBX文件中,Unity3d是可以识别的。
8. 影响烘焙渲染质量的因素分析及解决方案
前面我们一起讨论了造成烘焙渲染缓慢的原因和解决方案,下面我们继续剖析造成很多烘焙缺陷原因及解决方案,前面所讨论的渲染烘焙缓慢的原因也是造成各种烘焙缺陷的根源,接下来我们逐一进行分析。
⑴ 模型面数超高是影响烘焙质量的重要因素
有耐心的童鞋,硬着头皮等待了很长时间,烘焙完了整个场景,结果却发现到处是黑斑、亮斑、硬边、漏光、漏阴影、破面、撕裂、亮面、黑面等缺陷,整个场景看上去很脏,一下就懵圈了,全然不知如何解决。根据小姐姐个人经验,要解决上述的烘焙缺陷,首要问题应该降低模型面数,也就是在保证模型外观情况下,尽可能使用较少的面来构建场景。大家可以试想一下,两个一样的模型,一个面数很高,另一个面数很低,当他们被拆分(展平)在相同分辨率的lightmap UV贴图坐标中时,相对于低面模型来说,高面模型的每个面只有缩得很小才能被容纳在这个lightmap中,当某些面小到不足以表现这些面所受的光照的细节时,偏暗的像素就会积聚成黑块,偏亮的像素就会集聚成白块。进而当这些lightmap包裹到对应的模型面上时,就出现了黑斑或白斑,如下图所示。而低面模型相对高面模型来说,在相同分辨率的lightmap中,每个面所占的比例就大的多,足以表现每个面所受的光照的细节,因此烘焙的结果清晰、干净。
大家继续来看下面第二张图,一些面原本需要在下面左图所示的大小的UV区块上来表现光照,但由于模型面数太多,Unity3d展平UV后,自动分配给这些面的实际UV区块,只有中间图所示的大小,烘焙完成后,这些面对应的光照图要包裹到1:1的模型面上,需要放大很多倍。大家都知道,当一个很小的图被放大很多倍时,Unity会以插值法来弥补像素,弥补的像素RGB值是原本相邻的两个像素RGB的平均值,即右图所示的结果,当这张图的“色带”的分界线贴在某个面上时,就出现常见的“硬边”缺陷,当深色的“条带”贴在某个面上时,就出现了常见的“黑面”缺陷,同理,当浅色的“条带”贴在某个面上时,就出现了常见的“亮面”缺陷。总之,如果不采用精简的低面数最优化单面建模,而使用传统的实体建模方法,模型面数会很高,烘焙时,不仅耗时,而且会出现各种各样的缺陷。
⑵ 面重叠也是影响烘焙质量不可忽视的因素
面重叠对烘焙质量的影响比较隐蔽,常常被很多人忽视,甚至有些童鞋压根就不知道面重叠会影响烘焙质量,但它对烘焙质量的影响确实不容忽视。为了让童鞋们了解什么是面重叠,我们还是以前面烘焙的场景为例进行图解,小姐姐将这个场景的poly合并成了3层和一组配饰模型,分别为1_F、2_F、3_F,为了方便大家搞清关系,小姐姐将模型拉开显示了,如下图所示:
这里我们先不解释什么是面重叠,而是先讨论如何检测面重叠,对于使用3dmax建模的童鞋,可以按照下图所示的步骤打开面重叠检测功能。
打开之后,屏幕显示如下图所示的信息,其中“Overlapping Faces:”的意思是重叠面的数量,因为刚打开,没有选择物体,所以后面显示“Not Applicable(不适用)”。“Click here to Configure”意思是点击这儿来配置相距多远算作重叠,一般设为0.0001,也就是相距很近很近。“Click to Update”意思是点击这儿来更新,当选择物体后,点击这个按钮来显示重叠面的数量。
下面我们就以3_F,也就是三层的模型为例来检测重叠的面,首先点击“点击这儿来配置”,设置间距为0.0001视为重叠,如下图所示:
接下来在场景中选择3_F,然后点击“Click here to Update”,此时“Overlapping Faces”的数量显示为16,也就是3_F中有16个面重叠,如下图所示。
接下来我们看看到底面是怎么重叠的,按Alt+Q隔离3_F,旋转视图观察,没有发现重叠面提示,有时候确实很难发现重叠的面,但是大家都知道,面的重合,必然伴随着顶点的重合,所以我们将面重叠改成顶点重叠检测,按下图所示的图示步骤打开顶点检测功能。
和前边面重叠检测的操作一样,配置间距容差为0.0001,然后点击“Click here to Update”,屏幕信息显示38个顶点重合,如下图所示。
与此同时,场景中显示很多绿色顶点,这些绿色的点就是重叠的38个顶点,现在我们就来看看这些绿色的顶点到底是什么回事,要选择和编辑顶点,我们得进入poly的顶点层级,然后选择一个绿色的顶点,旋转视图观察,如下图所示
将选中的这个绿色顶点沿y轴向后移动,得到如下图所示的结果,至此,小姐姐就不用解释什么是面重叠了,从下图中可见,确实在这点处有面重叠。
移除这个顶点,或者和刚才位置的顶点焊合,然后再次检测顶点重叠和面重叠,重叠的顶点数和重叠的面数分别降低为36和14,如下图所示。
由此可见,通过移除或焊合,可消除顶点重叠或面重叠,以此类推,可消除所有重叠的顶点和重叠的面。
通过以上的图解,大家已经知道如何找到重叠的面和重叠的顶点,以及如何消除重叠面和重叠的顶点,同时也了解了什么是面重叠和顶点重叠,那么到底面重叠对Unity3d的光影烘焙质量有什么影响呢?下面我们就一起来讨论一下。
前面我们已经讨论过模型面数超高对Unity3烘焙质量的影响,而且得到结论,面数太高,会导致所有面展平后在lightmap中所占的比例大幅减小,进而使烘焙后出现各种各样的缺陷,面重叠和模型面数超高一样,展平后,那些重叠在有效面后面、对场景造型没有任何贡献的毫无意义的多余面也会挤占有效面的UV空间,使得有效面在lightmap中的比例缩小,所以必须清除重叠面。重叠面不仅对场景造型没有任何贡献,而且展平后还会为渲染烘焙这些毫无意义的面消耗很长的时间,同时因为挤占了有效面的lightmap的UV空间,使得有效面的UV空间相应减小,从而导致前面所述的各种烘焙缺陷,所以要加速烘焙、提高烘焙质量,清除重叠面是不容忽视的。对于使用Cinema4D和Maya建模的童鞋,都可以在自己习惯的建模软件中找到检测重叠面的功能,大家可自己去尝试,这里就不一一赘述了。
⑶ lightmap UV布局也是影响Unity3d烘焙质量最重要的因素
虽然降低模型面数、消除面重叠都会加速烘焙渲染和提高烘焙质量,但是如果有效面的Lightmap UV的布局如果不合理,最终的烘焙依然会很耗时、烘焙质量依然会很差。那么什么叫Lightmap UV布局不合理呢?一方面是Lightmap UV没有充分利用lightmap UV空间,所有UV区块集聚在lightmap UV的某一部分,使大量的UV空间都白白浪费。另一方面就是Lightmap UV的布局因根据面的大小调整对应UV区块的比例,使得lightmap在所有物体上均匀分布,这个可能有些童鞋不大理解,这么来说吧,所谓的不均匀,就是光照图在一些物体的某些面很清晰,而在另一些面很模糊,大家在贴材质时经常会遇到,贴图在物体不同面上的大小不同,这就是贴图的UV分布不均匀造成的,和这个道理一样,lightmap UV的布局也应考虑均匀分布,为了消除烘焙缺陷,如果极端地使用每个物体的“Scale in Lightmap”来调整物体的UV比例,是无法做到Lightmap UV的均匀分布的。
如下图所示的Lightmap UV布局使得所有UV区块都聚集到了这个ligtmap UV的左下角,这使得所有面在整个lightmap UV中所占的比例都很小,导致有些面所受的光影效果无法充分表现而造成最终的烘焙缺陷,同时为了消除烘焙缺陷,只能定性地增大“Scale in Lightmap”这个参数反复测试,无法精确控制UV的布局,而且随着每个物体“Scale in Lightmap”参数的增加,烘焙渲染越来越慢,因此小姐姐个人认为,Unity3d的lightmap UVs展平功能有致命的缺陷,所以强烈建议童鞋们使用自己习惯的3D建模软件来展平lighmap UV,例如3dMax、Maya、C4D等。
下图是小姐姐在3dmax中展平的前面烘焙的案例场景的lightmap UV,从下图可见,四张lightmap的UV布局充分利用了UV空间,没有像Unity3的展平那样,全部集聚在某一局部,而是均匀地分布在整个lightmap UV空间中,同时所有面的UV大小也是均匀分布的,烘焙后不会出现lightmap局部清晰或模糊现象。更不会出现任何烘焙缺陷。
下图是将在3dmax中展平的lightmap 导入Unity3d,并经高质量烘焙后得到的光影图,由图可见,Unity3d老老实实地按照3max展平的UV高质量地烘焙出了整个场景的光照图。一气呵成,无任何缺陷,且总共用时7.5分钟。从前面的截图大家都已经看到,整个场景没有任何烘焙缺陷,而且光影图非常清晰,明暗层次分明。
由以上的图解可见,lightmap UV的布局,的确会影响着烘焙的质量,也就是合理的UV布局,不仅会加速烘焙,而且可以提高烘焙质量,不合理的UV布局,不仅会导致烘焙缓慢,而且很难保证烘焙质量。
正是小姐姐在模型阶段采用了3dmax最优化低面数精简建模方法构建的整个场景,并在3d中排除了所有的重叠面,同时在3d中合理地拆分(展平)了lightmap UV,所以在Unity3d中仅用了7.5分钟就快速高质量地烘焙出了整个场景。当然,一些童鞋会说,自己烘焙一些实例,也是几分钟完成了,也没什么烘焙缺陷,那是因为你所用的案例模型都是很简单的,并且经过优化处理的,当然烘焙很快,而且没有任何问题,但是一换成实际的项目场景,立即就卡住不动了,少则几个小时,多则几天烘焙不出来。所以只要按照小姐姐上述的方法,可在几分钟内快速完成实际项目的烘焙渲染。当然其中会涉及到一些经验。
9. 分步/分批次烘焙渲染
一些童鞋的机器可能配置太低,整个场景一键烘焙可能吃不消,或者烘焙太慢,此时可以分步烘焙渲染,也就是一次烘焙一个或一组物体。有时只有某些物体有烘焙缺陷,通过分步/分批次烘焙,可避免无缺陷物体的重复烘焙时间。下图所示为单独烘焙1层的情况下,仅用时2分多钟。依照这样的方法,然后分别选择2层、3层进行单独烘焙,每次只选择一个或一组物体来烘焙,前面已经烘焙完成的物体不会受影响,这样不仅会减轻一次烘焙的机器负载,而且避开了一些物体的重复烘焙,尤其是当某个物体烘焙出现问题的时候,可将排查范围锁定在所选择的物体内。对于机器配置较低的童鞋,无需再为升级硬件支付额外的成本,这个功能是小姐姐个人的一些经验所得。
10. 烘焙渲染分类
烘焙渲染根据灯光和物体的状态可分为静态灯光下静态物体的烘焙、静态灯光下动态物体的烘焙、动态灯光下静态物体的烘焙、动态灯光下动态物体的烘焙四种。对于早先从事3D动画的童鞋,肯定不理解为什么要有这四种分类呢,因为动画只需将场景中的所有物体渲染成图片序列(视频),终端用户只需要播放就可以了,而VR和游戏是需要用户和场景进行交互操作的,两者的机理有本质的区别,作为VR和游戏的开发程序,Unity自然有自己独特的烘焙渲染方式。下面我们就这四种烘焙渲染方法一一展开讨论,为了简化问题,我们设定一个比较简单的场景,如下图所示:
⑴ 静态灯光下静态物体的烘焙
前面我们讨论的斯蓬扎宫的烘焙就是静态灯光下静态物体烘焙的典型实例。之所以称之为“静态灯光下静态物体的烘焙”,是因为除相机外,灯光的状态(位置、方位角、颜色、强度等)以及物体的状态(位置、方位角、比例、材质等)相对时间恒定不变,简单地说,就是灯光和物体的状态不随时间变化。这种烘焙的设置前面提到过,这里我们再讨论一下,其设置如下图,即第一步先将产生阴影的主光源的灯光模式(Mode)设定为“baked(烘焙模式)”。第二步将需要烘焙的物体设定为“Static(静态)”,如果不设定为静态,烘焙之后没有任何效果。第三步将lighting(光照)面板中Realtime Lighting(实时光照)下的Realtime Global ILLumination(实时全局照明)选项取消勾选,保留Mixed Lighting(混合照明)下的Baked Global ILLumination(烘焙全局照明)选项的勾选。然后进行必要的其他设置,烘焙上面的场景就得到上图的静态灯光下静态物体的烘焙效果。
这种烘焙方式在烘焙完成后,所有直接光照和全局光照完全被转移到光照贴图中,此时无论如何调整灯光(灯光强度、灯光颜色、灯光角度),甚至将灯光模式改为mixed或realtime,或者勾选"realtime Global Illumination",都对场景无任何影响,也就是说,这种方式烘焙的场景,运行时灯光是不能改变的(如下图所示),大家可以自己试一试。
有童鞋可能会问,这种烘焙方式,场景中是不是不能有运动物体,当然不是啦,只是运动物体就像被烘焙忽略一样,没有任何光影效果而已,但运动在场景中是存在的,并且保持着原有的运动效果,简单地说,这种烘焙方式不适合有运动物体的场景。
下面是“斯蓬扎宫”应用这种方式烘焙的正午时分的截图,其效果可以与Vray的渲染效果媲美,当然这需要一些经验。
小姐姐的文章,只能让大家理清思路,要真正掌握Unity的美工制作流程,必须学练结合,还需要前人的言传,有些东西毕竟还是没法用图文来表达的,有兴趣的童鞋可以关注小姐姐的《Unity模型预处理布光烘焙后处理特效美工场景优化实战视频教程》,在听讲的同时,通过多案例临摹和感悟,才能脱开教程,将所学的技术应用于实际项目,如有需求可V询(qtpl_wx)小姐姐。
⑵ 静态灯光下动态物体的烘焙
这种方式适合灯光静止且有运动物体的场景(如马路上行驶汽车的城市场景)。为了演示静态灯光下动态物体的烘焙,我们在上面的场景中,添加一个Cube(立方体),用它来代替运动的物体,它可能是一辆汽车、一个角色,或者是其他的运动物体,总之,为了简化,这里用一个运动的立方体来表示,位置如下图所示,按照前面的概念,要烘焙这个立方体,也得勾选“Static”,否则烘焙后没有效果。所以选中这个立方体,然后勾选“Static”,设定这个立方体为静态(运动的物体是不该设为静态的),然后重新烘焙整个场景。
下面用一个G
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。