如何读懂UWA性能报告?—粒子系统篇

如何读懂UWA性能报告?—粒子系统篇

大家是否还记得,之前的UWA报告解析——渲染篇中我们有提到:粒子系统是目前大量项目中半透明渲染耗时较高的“罪魁祸首”,如果你的项目半透明渲染较高,一定要重点查一下粒子系统的渲染开销。今天我们就接着这个话题,为大家分析下粒子模块的数据该怎么看,并为此提供一些优化的思路。

友情提示:本系列为Unity开发者通读版,力求做到人人能读懂。当然,纸上得来终觉浅,绝知此事要躬行,www.uwa4d.com等你来体验。


抛砖引例

一般来说,粒子系统的开销主要与其更新的粒子系统数以及每个粒子系统包含的粒子数相关。我们打开UWA测评报告中的“粒子系统”界面即可看到对应的详细信息,在此我们以“星辰奇缘”在红米Note2上的性能数据为例:

请输入图片描述
请输入图片描述

如上图,几个参数指标分别为:“ParticleSystem.Update CPU峰值”,“ParticleSystem.Update CPU均值”,“ParticleSystem 渲染峰值”,“ParticleSystem 渲染均值”。接下来是”ParticleSystem.Update ”和“ParticleSystem 渲染耗时“的走势图,Unity 5.3以前的版本主要看这两个函数,之后的版本我们需要另外考量其他几个函数。同时,我们可以通过与图表交互,查看每一场景、每一帧的具体CPU占用情况。

同样地,比起峰值,我们建议开发团队多多关注下主体范围的情况(点开”分析与建议“)。
请输入图片描述
上图中,该游戏的ParticleSystem.Update的CPU占用峰值为3.8 ms,均值为0.3 ms,主要集中在0.1~0.5 范围内(5%~95%),该值处于合理范围(<3 ms)之内。粒子系统渲染耗时均值为15.6 ms,主要集中在0.5~2.8范围内(5%~95%),该值处于合理范围(<3 ms)之内,整体表现非常出色,但是大部分项目的实际情况可能与之大相径庭,特别是游戏进入战斗副本时CPU耗时会骤然升高,那如何优化呢?我们继续往下看:


优化心得

之前我们也提及,游戏打怪过程中渲染模块的主要开销为半透明渲染所占据。而究其原因,主要是技能特效播放时的粒子特效所致,如下图:

请输入图片描述
大家会常常发现自己的游戏在副本打斗的过程中粒子系统开销较大,进入副本时ParticleSystem.Update CPU走势一下子就上去了:
请输入图片描述

对此,我们一般建议研发团队根据移动设备对粒子系统进行管理,对于低端设备尽可能降低粒子系统的复杂程度和屏幕覆盖面积,从而降低其渲染方面的开销,提升低端设备的运行流畅性。具体做法如下:

  1. 在中低端机型上降低粒子数、同屏粒子数,比如仅显示“关键”粒子特效或自身角色释放的粒子特效等,从而降低Update的CPU开销;
  2. 尝试关闭离当前视域体或当前相机较远的粒子系统,离近后再进行开启,从而避免不必要的粒子系统Update的开销;
  3. 尽可能降低粒子特效在屏幕中的覆盖面积,覆盖面积越大,层叠数越多,其渲染开销越大;
    4.对于Unity 5.x项目,可尝试升级到5.3以后版本,因为Unity在5.3版本后对粒子系统底层进行了深入的优化。

粒子系统拼合

特别地,大家会在粒子系统渲染耗时的走势图底端看到“粒子系统拼合“,在这里我们能查看其粒子系统的具体耗时、拼合的粒子系统数以及未拼合的粒子系统数。
请输入图片描述

关于粒子系统拼合,是指引擎会将若干个材质相同且深度相同的粒子系统在渲染前进行合批(Batch),从而通过一个Draw Call来对其粒子系统进行渲染,进而降低粒子系统的渲染开销。

补充:粒子系统的Draw Call动态拼合与半透明物体的动态拼合机制相当(粒子基本都是半透明材质)。而对半透明物体,由于其渲染顺序的限制(必须从后向前渲染,以保证渲染结果的正确性),动态拼合只能对渲染顺序相邻且材质相同的物体有效。而在决定半透明物体的渲染顺序时,Unity首先会按Shader中的RenderQueue进行排序;其次(相同RenderQueue时),会根据每个半透明物件到屏幕的距离,距离大的优先渲染。

因此,需要尽可能地将相同材质的粒子系统放在比较接近的深度下,才能更多地使动态拼合生效。但通常由于相机的运动、粒子系统的分散分布等原因造成粒子系统之间的穿插,能够动态拼合的数量往往都是很少的,所以我们在粒子系统模块看到的开销分布通常类似该图,主要都是未拼合粒子系统造成。

经过我们验证,Unity 5.3.5 版本中恢复了对粒子系统的动态合批功能(可尝试添加多个默认的粒子系统,观察Batches的数量变化)。

今天的分享就到这里,下一期我们会继续讲解UWA测评报告中的UGUI模块,感谢各位开发者的关注。

  • 九宫寿 发表在 2016年08月09日 回复

    你好楼主,能详细说一下粒子系统拼合的过程和流程吗,谢谢!

    • admin 发表在 2016年08月10日 回复

      这个和引擎底层的实现有关,我们这边暂时无法给出详细的说明。

  • 九宫寿 发表在 2016年08月09日 回复

    你好楼主: