先看看本案例的部分效果截图:
本文小姐姐以一个办公场地为例,和童鞋们再次讨论Unity3d室内场景的灯光布设、光影烘焙和后处理,希望对初学者有所帮助,本例的3dmax场景如下两图所示,其中第二张图为从后面观察的截图。这个场景的模型面数原本为90多万,面线纵横交错,彷如蜘蛛网,为了优化场景和方便图解,小姐姐用3dmax最优化低面数精简单面建模方法重构了这个场景,由下图左上角的统计信息可见,面数缩减到了21.5万。无论使用Unity3d,还是UE4,或者CE等其他引擎,3d模型都必须用尽可能少的面数来构建,否则后期的光影烘焙和实时运行会遇到灾难性的卡顿,这是小姐姐反复强调的话题了,相信一些童鞋已经感同身受,但是还有一些童鞋硬着头皮往前冲,继续沿用效果图和动画的建模方法构建场景,最后一定会因模型面数太高绊倒在光影烘焙和作品实时运行这个坎上。因此对于VR和游戏场景,模型师一定要采用最优化低面数精简的单面建模方法来构建,无论使用3dmax、maya、C4D、Blender、Sketchup、Modo,还是其他3D建模软件,都应力求降低模型面数。需要说明的是,若在阅读本文过程中有什么疑问,可V询(qtpl_wx)小姐姐,也可去淘小姐姐的Unity模型预处理布光烘焙后处理特效美工场景优化实战教程。
由上面两图可见,小姐姐重构的场景,拓扑布线简洁平整,看上去很舒服,而且编辑操作流畅无卡顿。
1. 场景结构解析
为了便于童鞋们对本例后续的理解,小姐姐先对这个场景的构造作一详解。由上面两图可以看到,这个场景是一个办公场所,从下到上分别由-1层(地下室)、1层、2层三部分组成,为方便观察,小姐姐将这三层拉开如下图所示。有童鞋可能会认为这三层都无屋顶,其实不然,因为小姐姐是用单面建模构造的场景,这个场景主要表现室内,所以屋顶的正面朝下,从上面看到的是屋顶的背面,所以看上去似乎是镂空的,这是单面建模的特点,面的背面都是镂空的,而当我们从室内观察的时候,屋顶是可见的,如下面第二张图所示。
三层之间是通过楼梯间贯通的,如下图所示,为了让大家看清关系,小姐姐将楼梯间水平向外移动了,并且楼梯间有玻璃幕墙,用来采光。
这个场景乍一看很复杂,仔细的童鞋会发现1、2层大致是左右对称的,如下图所示,这样以来,对于1、2层,我们只需搞清下面第二张图红线部分即可。
下面我们就先来看二层右半部分,室内陈设如下两图所示,其中有沙发、茶几、装饰品、挂画、饮水机、资料柜、椅子、接待台、转角办公桌椅、集中办公桌椅、打印机、复印机、台式电脑、笔记本电脑、货架、饮水杯、台灯、洗脸盆、马桶、书柜、玻璃隔断等。
二层右半部分的功能分区如下图所示,楼梯间右半部分有接待区、大办公区、两个小办公区、会客室、走廊、卫生间等。
通过以上的图解,相信大家对二层右半部分的结构就搞清楚了,与此同时,整个二层结构(如下图所示)也就都明白了。
二层结构搞清楚之后,我们再来看一层(如下图所示),由下图可见,一层与二层相比只是家具布局不同,建筑结构完全相同。
接下来我们再看看-1层,如下图所示,这一层比较简单,一目了然,没有窗户,采光主要依赖于屋顶的格栅灯。
楼梯间与地下室、一层、二层的联结关系如下三图所示,从图中大家可以看到这三层的墙体都有踢脚线和阴角线。
通过以上的图解,大家应该对这个场景的结构有了详细的了解,同时大家也可以看到最优化低面数精简单面建模方法构造的场景边面简洁平整,编辑操作清晰流畅,可大幅度降低模型面数的优势。
2. 模型阶段预处理
小姐姐在别的文章中反复强调,用于VR和游戏的模型,无论你是用3dmax、maya、C4D、Sketchup、Rhino、lightwave、softimage、
blender还是modo等其它软件建模,都必须采用最优化的低面数精简单面建模方法构造场景来大幅降低模型面数,以保证Unity3d中场景烘焙的速度和质量及最终作品的实时运行流畅,同时在模型构建完成后,还应针对模型、材质、贴图、灯光、视锥剔除、遮挡剔除、LOD、和碰撞物进行优化预处理,以免场景导入Unity3d后才发现需要返回建模软件进行前置处理而白白浪费时间。
VR和游戏开发是一项多人协同的作业,建模师虽然不参与美工和程序,但也必须了解这两个阶段对模型阶段要求,除了采用最优化的低面数精简单面建模方法构造场景外,建模师还应了解一些优化预处理的知识点,下面小姐姐对这方面的知识点作一详解。
⑴. 建模方法的优化
很多刚刚接触Unity3d的童鞋,一直沿用以前做效果图和动画的建模方法,也就是习惯用建模软件提供的标准几何体堆砌场景,或者用二维线拉伸、旋转、放样等构件场景物体,并不间断地使用一些布尔运算开洞,这样的建模方法构造的物体面数非常多,模型自交严重,很多面都是无用的,Unity3d甚至UE4、Cryegine、寒霜等所有引擎,都强烈建议使用最优化的低面数精简单面建模方法来构建场景,简单地说,就使用最少的面数来构建场景,因为模型面数是造成卡机的最大祸首,有的童鞋很偏执,就是不改陋习,非要用自己习惯的方法建模,那没问题,往前走几步,必然卡顿在超高的模型面数上。建模方法不同,构建的同一物体的面数千差万别,因为游戏和VR引擎的场景是实施运行的,不像效果图和动画一样,最终只渲染成静帧图片或图片序列,从建模开始,就不注意控制模型面数,会导致后续的很多处理很难推进。最优化低面数精简单面建模,就是用简单的poly,通过切分面线,然后推拉构造物体,有效避免了模型自交,还可大幅度降低模型面数,所以建议大家使用小姐姐推荐的方法来构建场景,上面大家看到的案例场景,就是小姐姐自己构建的,面线平整简洁,面数很低。
⑵. 模型拓扑布线优化预处理
在前面的图示中,大家一定看到如下图所示的物体,我们不妨将它单独移出来,一定有人会问,小姐姐为什么要这样建模呢?这就是所谓的拓扑布线问题,也就是物体上的边线布设问题。一般情况下,物体(poly)的布线应根据物体的造型、材质、贴图、形变以及拆分UV2的需要来布设,同时这些边线的布设决定着模型面数的多少,不合理的布线会使模型的面数急剧上升。
有了解单面建模的童鞋存在很多疑问,觉得单面建模就是尽可能减少模型面数,一些模型的某些面上明明不需要边线,却发现某些面反而布设了边线,这正是物体的布线要根据物体的造型、材质、贴图、形变以及拆分UV2的需要来布设的原因。下面我们先来说说根据物体造型需要的布线(也就是可编辑多边形的边面切分或分割),因为上图那个位置有个窗户,我们需要在那个位置开个窗洞,一般情况下,按照最优化低面数精简单面建模的方法,先构造一个和窗户墙等大的几何体(如下第一张图所示),然后将需要开洞的面的上下和左右边分别布两条线(也就是连接两条线或者分割两条线),形成如下第二张图所示的网格面。
接下来选择中心的面(如下第一张图红色部分所示)删除,形成下面第二张图所示的洞口,同理,在背面也开一个这样的洞口,然后将两个洞口的边缘线桥接,形成第三张图所示的窗户洞。
一些用过单面建模的童鞋认为这个窗洞就开好了,但是,小姐姐认为,这里还需要对布线作进一步优化。原因是上面的方法将窗户墙的前面分割成了8个面(如下图所示),不仅如此,背面也被分割成了8个面,同时,还给每条外边线各增加了两个节点,把每个外边线分割成了三段,导入Unity后,顶面会因前后面各增加的两个节点,自动连接节点生成如下第二张图的6个三角面,底面和两个侧面也会各生成6个三角面,这个窗户墙会变成64个面,unity3d的模型面是按三角面处理的,也就是3dmax中的四边面到了u3d中,会自动连接每个四边面的对角线转换成三角面的,上面的64个面,就是64个三角面,64个面是怎么来的呢,前后墙面各8个四边面,就是16,窗洞4个四边侧面,加起来就是20个四边面,自动转换成三角面就是40个,窗户墙顶面、底面、左右侧面各自会自动变成6个三角面,这样又有24个三角面,40个三角面+24三角面,总共64个三角面。
如果对布线进行一些优化,即将下图中2、3节点与节点1焊合(或叫合并),5、6节点与节点4焊合,7、8节点与节点6焊合,10、11节点与节点9焊合,形成如下第二张图所示的布线,窗户墙的前面就只被分割成了4个四边面,同时也不会分割相邻面的边,这样以来,整个窗户墙(前后各4个四边面,顶底和左右两侧4个四边面、窗户洞4个四边面)总共16个四边面,导入u3d自动转换成32个三角面,这与前面的布线方法相差一半,有的童鞋说,相差一半关系不大,1和2相差一半,没什么区别,大家可别忘了,一个场景50万面和100万面,200万面和400万面区别可就大了。
如果不优化拓扑布线,这样的物体被大量复制,模型面数会急剧成倍上升,小姐姐这个例子比较简单,如果造型复杂,不优化拓扑布线,可不就是2倍的关系了,这也就是这个场景中小姐姐使用这种布线的原因。
下面用图示比较一下同一个物体在3dmax中不同布线之后四边面和顶点区别以及导入Unity3d之后转换为三角面和顶点的情况,如下面两图所示。
从上面的图示可见,不同的拓扑布线,模型的面数和顶点数是不一样的,有童鞋会问,为什么要强调模型的顶点数呢?因为模型的面是由线构成的,线是由顶点构成的,与其说模型的面数太多造成的卡顿,不如说是由顶点太多造成的,有童鞋肯定不服,那我们就在自己熟悉的建模软件中通过修改段数构造一个上千万个面的茶壶,然后将所有面全部删除,只留下顶点,我们会发现,即使没有模型面,顶点太多一样很卡的,也就是说真正的卡机其实就是由顶点引起的,所以在建模的时候,既要控制面数,也要控制顶点数,小姐姐用斜向布线就是让多个三角面或四边面共享顶点,以控制顶点的数量,下图所示的物体,如果用实体建模,顶点和面数会过千,小姐姐只用了几十个面和顶点。
有的童鞋对小姐姐推荐的最优化低面数精简单面建模不以为然,也不服气,来,小姐姐给你一些图震撼一下,请看下面的图。(非常抱歉,由于这里的文章有字数限制,导致本文无法完整展现,因此您可去CSDN博客阅读小姐姐的完整同名文章)