移动端小场景优化方案

Posted 海洋_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了移动端小场景优化方案相关的知识,希望对你有一定的参考价值。

做好场景的渲染是非常重要的事情,在这里,我结合项目组遇到的问题,给大家做一个简单的分享:
先介绍一下小场景的优化方案:
美术人员在场景制作中经常会因为是小场景,效率没啥问题就不停地向里面放大量的物件,特效,灯光,全屏特效等等,殊不知,这么堆积东西的后果就是DC直线上升,CPU,GPU,温度直线上升,怎么优化就摆在了TA或者引擎面前,下面我就介绍一下怎么把DC和温度降下去。
一、合批
我们的游戏是俯视角的,所以一般的裁剪方案是不起作用的,直接排除了,下面大家肯定会想到合批,这种方案是正确的,没有问题,对于小物件需要合批的,静态合批,动态合批,GPU都可以使用,这可以降下来,同时关掉无用的灯光,采用LightMap 烘焙代替多灯光,让场景的灯光只保留一盏,这样的确减少了CPU的压力,但是QA 的测试报告显示,GPU依然占比比较高,温度依然高于60度,摆在我们面前的依然需要继续优化。接下来再优化什么呢?
二、地形分块
对了,地形分块,我们可以将地形分成多块,便于相机对地形的裁剪,如果是一整块,不论相机怎么移动,它一直是整体的存在,但如果分块后,不在相机范围内的就可以不用加载,减少了GPU渲染,如果有水的渲染,同样可以将其分块,同时把与建筑重合的部分剔除掉,换句话说,水只显示在它该显示的区域,其他的就直接去掉,GPU还会下降。这还不够,继续分析。
三、半透屏幕占比
相机在移动时,比如树叶什么的占了屏幕大部分,会增大OverDraw,GPU消耗直线上升,这个也需要优化,比如,将树木缩小,或者将树木分布稀一些,可以改变草的做法,直接用不透的草绘制,一簇一簇的,利用GPU instancing去处理,将半透替换为不透。减少后处理渲染,这个也是增加OverDraw的,减少全屏特效的处理,减少粒子数量,减少无用的特效。
四、渲染顺序合理
渲染顺序的排列也是非常重要的,比如地形的渲染队列数值的设定,水的渲染顺序的设定,物体的,这些物件的设定依据的是如何减少OverDraw进行的,比如渲染一个场景里面有水,有地形,有建筑,我们可以设定地形的渲染在建筑的后面等等。
五、注意影响DC的因素
我们在关注DC数值时,也要关注它们实际的渲染操作,举个例子,10个不同的物体,如果我们使用两个材质球,五五分二组,再不合批的情况下,是10个DC,同样,也是这10个物体,我们使用10个不同的材质球,分别赋予它们,DC也是10,但是它们的GPU消耗是完全不同的,前者只需要加载两次材质球中的贴图就OK了,但是后者需要加载10次,这就会出现Catch missing的问题,增加GPU消耗,所以虽然表面是一样的,但实际是不同的。
六、Shader指令的优化
Shader中的指令数量也是决定Shader消耗的关键因素,我们通常使用Mali这个软件去查看Shader中指令的消耗时间,另外Shader的变体也是要时刻关注的,Unity的Vert Frag模式控制起来方便,Surf方面需要自己去处理一下,通过加宏来减少不必要的变体。

七、贴图的压缩
贴图的压缩格式选择,我们通常使用ASTC,ETC,PVTC根据不同的平台选择不同的压缩格式算法,以及MipMap的选择使用,可以查看MipMap对场景的影响,选择优化的方案。
八、Mesh压缩
直接看图:

Vertex Compression,它是按照算法直接压缩的,效果是最好的,另外下图所示的:

Mesh Comression,该方案会在内存和GPU各保存一份,而且选中它后,上面的Vertex Compression就会失效,而且Mesh Comression会增大内存的使用,不建议开启。
九、特效和UI的OverDraw
二者的优化重点是关注OverDraw的优化,一般不高于4倍,否则必须要优化,尤其是全屏特效。
十、PSS内存的管理
这个主要是游戏逻辑要注意的地方,尤其是使用了Lua脚本后,二者的GC是分开处理的,建议可以每隔15分钟左右GC一次,强制GC,减少GC的次数也是减少卡顿的次数。根据项目具体情况决定。内存泄漏在逻辑中是比较常见的,借助UWA或者性能狗这些第三方平台去查找,比较方便。
十一、代码Review
定期代码的Review,这个对于团队开发来说,非常重要,可以避免一些由于编码不规范导致的隐藏问题,及早发现,及早改正。
十二、第三方工具测试
选择第三方工具,可以帮助我们快速定位问题,常用的的比如UWA,PrefDog等等,加快项目的优化速度。

关于小场景的优化,主要关注的是上面所列的点,其他的比如美术制作规范什么的,就不一一列举了,通过上述优化后,温度基本上降下来了,各项指标满足需求,优化完成。希望对开发类似休闲游戏一类的小场景的研发人员有所帮助吧,以后每年的1024写一篇博文做个留念吧,在此也立个Flag。大场景的优化关注点后面再介绍吧。

以上是关于移动端小场景优化方案的主要内容,如果未能解决你的问题,请参考以下文章

移动端小场景优化方案

Unity3d办公场景灯光布设与光影烘焙及后处理【2021】

Unity3D 5.0+模型合并&灯光烘焙降低Draw Calls方案

Unity3D图形渲染优化渲染管线优化图形性能优化

Unity3d代码及效率优化总结

移动端小功能杂记