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

简介:

抛砖引例

一般来说,粒子系统的开销主要与其更新的粒子系统数以及每个粒子系统包含的粒子数相关。我们打开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的数量变化)。





原文出处:侑虎科技
本文作者:admin
转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。

目录
相关文章
|
10月前
|
前端开发 JavaScript UED
前端性能的性能指标之首次内容绘制(FCP)
首次内容绘制(First Content Paint)是前端性能的一个重要指标,因为它是用户体验的一部分,并且对于网页的响应速度和可接受性有很大的影响。
304 0
|
8月前
|
JavaScript 前端开发 开发工具
作为开发人员,如何一秒洞悉文件结构?
不要怀疑,这是真的,实践可以用,没发现任何问题,欢迎来打脸~~。曾经在处理复杂的文件结构时感到束手无策吗?别担心,说一个真正的解决方案——JavaScript中的tree-node包。它能以一种惊人的方式展示文件和文件夹的层次结构,让你瞬间掌握复杂的项目布局。
62 1
作为开发人员,如何一秒洞悉文件结构?
|
11月前
|
Web App开发 机器学习/深度学习 TensorFlow
图片迟迟加载不了、一片马赛克?谷歌开源模型优先显示图像受关注部分
图片迟迟加载不了、一片马赛克?谷歌开源模型优先显示图像受关注部分
图片迟迟加载不了、一片马赛克?谷歌开源模型优先显示图像受关注部分
内存清理、动画制作、CPU检测等五款实用软件推荐
人类与99%的动物之间最大差别在于是否会运用工具,借助好的工具,能提升几倍的工作效率。
256 0
内存清理、动画制作、CPU检测等五款实用软件推荐
|
算法 前端开发 芯片
[静态时序分析简明教程(二)] 基础知识:建立时间、保持时间、违例修复及时序分析路径
[静态时序分析简明教程(二)] 基础知识:建立时间、保持时间、违例修复及时序分析路径
[静态时序分析简明教程(二)] 基础知识:建立时间、保持时间、违例修复及时序分析路径
|
Web App开发 JavaScript 前端开发
国内第一篇讲如何减少卡顿的代码级别详细文章
国内第一篇讲如何减少卡顿的代码级别详细文章
127 0
国内第一篇讲如何减少卡顿的代码级别详细文章
|
缓存 算法 图形学
项目优化之DrawCall优化(Unity3D)
在游戏发开中我们都遇到过这些问题。我们将试着分析新的图形,图像压缩,新代码,这有用吗?这反而会浪费我们大量时间和成本。最终,我们尝试用一些奇葩的解决方案或者直接放弃。 在这里,我们将尽可能的减少我们的过失,我宁可说这是一个失误,也不愿意说这个一个错误,然而主要元凶就是Draw Call。 在我们解决Draw Call过多的问题之前,先来理解一下什么是Draw Call。
|
异构计算 图形学 编解码
|
Java 测试技术 图形学