优化不再秃头,这个优秀实践我们一点一点说。

优化不再秃头,这个优秀实践我们一点一点说。

UWA本地资源检测正式面世后,不少研发团队参与了体验并给出了反馈,我们很高兴该工具帮助大家有效提升了研发效能。在和用户的积极交流中,更有一位资深用户分享了他们完整的实践流程,从接入到分析排查到复测再到总结复盘,详尽又落地,可作为大家实践参考的攻略帖。

文末附建议收集栏,相互成就始于彼此的只言片语,期待大家的真知灼见。


在此特别感谢作者黄程的分享,以下为原文:
4月初项目到收尾阶段,终于有时间去应用一下UWA推出的新Pipline产品本地资源检测工具。在此记录一下整个使用体验过程。

一、接入和使用

1、接入
在UWA主页创建项目以后进入项目的测试概况界面并下载SDK,我们使用的Unity2018.4,因此选择下载“Unity 5.6-2019.3”这个包。
SDK的接入非常简单,在工程中建立Assets/ThirdPart/UwaProjScan/Editor目录(根据各自工程需求创建目录),将UwaProjScan.dll和uwascan_ruleconfig.json两个文件拷入,即完成接入。

2、运行
接下来使用默认配置进行资源检测,在Unity编辑器菜单中选择Tools/UWA Scan/Run即开始执行资源检测。完成以后在工程的Assets同级目录会生成一个UwaScan的目录,里面保存的则就是本次检测的结果数据。

3、提交
开始将检测结果数据提交UWA服务器进行报告的整理。将下载包内的UwaDataUploader.exe程序就是用于提交数据的。
首先配置一下config.json文件,填入UWA的用户名,密码和第一步创建的对应项目名。接下来执行命令执行上传。
Windows
UwaDataUploader.exe "./UwaScan"
类Unix
mono UwaDataUploader.exe ./UwaScan
我这儿的环境是Mac,因此要事先安装mono环境,去mono的官网下载MonoFramework-MDK-6.6.0.166.macos10.xamarin.universal.pkg安装即可。

4、查看报告
刷新UWA网站的本地资源检测页面即可查看最新上传的报告记录。官方会将历史检测记录进行图表化对比,有助于开发者了解迭代的进度情况。


二、报告分析

1、代码扫描检测
目前代码扫描检测项比较少,可以看到检测出代码中有2个空的Update方法,24个OnGUI方法的调用。

事实上平时我们开发时已经很注意这些空方法的移除工作,但实际还是会有遗漏,经过调查2个空Update方法对应到一个漏掉没改的和一个正在开发中的类。当项目代码规模到一定程度后,很难通过人工去做排查了。

OnGUI方法发现主要集中在于编辑器插件,因此需要后期使用工具排除检测目录功能将绝大部分排除掉。

经过修改后,只留下了一些必要的OnGUI方法调用。这一块基本就过了。

2、Editor设置检测
这块的检测项目前也很少。由于前期已经完成了设置,因此一次就过了。期待以后有更多的编辑器设置项检测来帮助开发者。

3、场景检测
这部分检测是和场景有关的,因此不要忘记切换场景标签来查看不同场景的检测结果。

由于我们采用简单场景+预制体运行时载入的方案,实际上场景内并没有多少内容,因此也是快速通过。

部分场景的确需要有雾的设置,因此即使这项未通过也是在预期内。

第一次检测发现有好多测试用场景也被包含检测了。重新配置了检测选项, 将scan_scene_mode改为buildonly以后,只检测打包的场景,就减少了不必要的信息。

4、项目资源检测
项目资源检测是重点,也是问题最多的地方。

4.1 首先来看贴图相关,首次检测:

1)发现很多过滤模式用Trilinear的,其实都是来源于第三方插件中使用的贴图,因此进行排除以后就没了;
2)一张纯色纹理是用于做特效的,有特定用途,因此也可以忽略;
3)尺寸大于1024的贴图绝大部分是UI的图集和大背景图,有合批的需求,大部分进行保留,但是也发现了有优化的余地;
4)非压缩格式中的9成也是来自于第三方插件自带的贴图资源。实际游戏中不会用到。少量的得以修;
5)Wrap为Repeat的基本上是用于特效的贴图,有UV动画的需求,因此需要设置成Repeat。

优化后基本都在可控范围内了:

过大尺寸的贴图会持续关注,UI后续根据式样修改还会做一些合并和拆分,因此失败数量应该还会进一步减少,美术后续对特效用途做一些梳理,但是优化空间不大了。

4.2 网格,首次检测:

58个开启了读写选项的网格基本集中在游戏场景中的Obj,以及特效中使用的面片。由于前期项目中使用了运行时贴花系统,需要开启场景中物体的读写来进行计算,后期系统移除以后这些选项都没有重新设置。这次都一起发现并优化了。

UV2主要是场景模型在使用,因为需要进行光照烘焙,和UWA聊了下,这块作为检测标准有待商榷,毕竟因为烘焙而开启UV2可以说是比较正常的。后期官方可能会改为检查UV3。

包含Color属性的Mesh发现全部是用于特效的,已经安排美术排期修改。这儿要说一下的是,可以通过导出单项的CSV,将需要修改的对象列表发给其他组员,这个真是非常方便的!

Normal属性主要是角色使用,要参与渲染效果计算,因此要保留,只优化了少数几份。
Tangent用不上都关闭了。

Mesh的面片数其实绝大部分都在原规划内,并且相比而言优化材质和进行合批更有效果,因此暂时不动。

结合之前贴图的问题以及后续的检测,都可以看出项目中特效相关资源还管理不足,有很多需要优化的地方,那么这次资源检测的工作对我们后2周的工作安排是很有帮助的。

4.3 材质

对比优化前后,可以发现这块的优化进步很大。包含空纹理采样的材质很多,检查发现是相当多的物体或者特效使用了同一个材质Shader来进行渲染,但又不是每个采样都用到,这样做提高了材质的共用性,有更多的合批机会,美术制作时也方便不少。

但的确也会提高一定的GPU负担。于是创建了一个新的Shader,提供相类似的渲染并剥离了不需要的贴图采样。将大部分空纹理采样问题修正,但是同时也提出一个新的疑虑,可能会有一组物体本来是同一个材质,只是参数不同,虽然之前也没有合批的机会,但是现在变成2个材质,切换材质的成本是不是更高了呢?还是要待后续进一步检测性能。

包含相同纹理采样问题,除了一个材质有特殊需求外,其他都得以优化。
包含无用纹理采样其实是材质切换Shader以后,原来一些使用到的纹理遗留在了材质文件内,Unity并没有去除。这个就很容易优化掉了。

4.4 动画的检测结果有点出乎意料的。
我们的带动画的角色模型导入的时候会自动进行处理。已经进行了剥离scale和降低精度的操作。经过检测发现居然没有效果。

原来我们忽略了FBX文件本身是只读的。导入时的处理其实并不能被保存。造成我们自以为进行了的优化实际上并没有发生。如果没有这个检测工具我们可能一直不会发现。

通过将FBX内动画拷贝出并关闭FBX的动画导出,重新关联动画Controller以后优化这些问题。
考虑到很多特效动画实际上需要对面片进行缩放操作,不能剥除Scale,因此将精度控制和Scale剥除分到2个不同的处理脚本。对所有动画进行批量降精度,只对角色动画进行移除Scale。

4.5 预制体及粒子系统

我们修改了角色预制体自动生成脚本,去除了MotionVector的勾选。
有不少粒子特效使用到了帧动画,因此纹理尺寸就降不下来。在不影响表现的前提下,对少部分纹理缩放到256以下。

除一个使用了特殊Spring系统的角色外,其他角色动画都开启了OptimizeGameObjects,但是还是检测出很多未开启。进一步检查后发现主要还是集中于特效动画或者是一些镜头动画,开始还未发现在哪儿可以关闭,经网友提醒找到了设置的地方,够隐蔽的。然而是灰色,并不能被操作。

那么检测工具是否能通过Animator.hasTransformHierarchy或者Animator.isOptimizable去判断是否能进行优化,无法优化的从报告中排除。


三、小结

团队的客户端人员使用本地资源检测工具后,异口同声地表示:“方便”。很容易找出项目中资源的各种不足并加以修改。

虽然不少优化项和需要注意的地方其实大家都是清楚的,并且也做了不少检查和优化工作,但是仍然会有很多点被遗漏。这几乎是避免不了的。然而该工具可以帮我们兜底守住这一道门。即使到最后很多虽然未通过,但是属于项目特例项的罗列,也能让我们清楚地跟踪它们,就算优化不了总比不知道它们的存在而失控要好。另外检测结果表明至少接近一半左右的检测项是一次通过的,也从侧面肯定了团队之前的开发工作。

如果在项目开发的早期就引入该工具,并且贯彻整个开发期间持续使用,我们可以进一步节省很多时间。

对于该工具的使用我觉得不能仅仅是项目后期对检测失败的具体资源进行修改这么简单,而是要初期设法针对每个检测项去设计项目特定的工作流和工作流工具。要将本地资源检测工具当作项目工作流的检测工具,而不仅仅是资源检测工具。而工具报告中的一些阈值则可以当作项目资源的参考标准和规范。

另外虽然日常我们都知道要注意各种规范和优化,但是大量业务需求下往往会一拖再拖,然而现在有了详细的报告,于是也有了一种推动力和理由去暂时停一停追赶进度的脚步,好好做一些优化工作再上路。量化的数据也更容易说服项目管理者或者公司上层去调整进度和计划。


后记

本地资源检测工具是可以通过uwascan_ruleconfig.json来配置检测项的,对于程序员还好,但是如果是QA组或者非技术人员参与排查就不方便切换了。于是我自行制作了对应的设置界面来操作切换配置。官方以后也肯定能提供更好的操作界面让大家更加便利地使用各工具集。

戳此体验本地资源检测。


UWA想开发者所想,急开发者所急,为了更贴合用户的需求,在此征集下一波功能建议。欢迎在UWA公众号留言或是私信QQ:289422269,我们会评估并适时地在之后的研发计划中落地。

建议收集贴
1、对于现有的Editor设置检测规则,有很多用户为我们提供了很多有用的建议,因为大家对这个点关注的比较多。在此我们希望放到更大的一个层面,征求大家在工作中还有哪些针对Editor设置的内容,从而希望我们UWA能帮助解决的呢?

2、请大家畅所欲言!我们UWA目前提供的这些检测规则是根据我们多年优化过程中得出的经验而制定的,我们也希望能不断打磨完善,从而更贴近研发团队的需求,所以你是否也希望在资源检测中增加某些新的规则呢?即使是一些比较特有的规则,欢迎私信QQ:289422269提出你宝贵的意见。

感谢大家的参与,每一个真知灼见,我们都会用心对待。期待未来我们的不断成长也能成就广大研发团队的不断卓越。