UWA发布 | Unity手游性能蓝皮书

UWA发布 | Unity手游性能蓝皮书

最新2022年度Unity手游蓝皮书出炉!此次发布分析了2022年1月至2023年3月期间,游戏行业使用Unity引擎进行手游开发过程中及游戏上线后的性能表现,从测试机型分布、引擎各模块开销、内存占用等方面进行汇总分析,反映了Unity手游行业的现状。

这是侑虎科技原创文章,欢迎转发分享,未经官方授权请勿转载。如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。(QQ群:465082844)


报告目录:
1)Unity手游测试机型分布
2)Unity手游CPU模块性能开销分析
3)Unity手游内存模块性能开销分析

本次发布我们针对不同档次的机型进行分档,分档的依据为UWA根据设备的算力。以下是每种档位的典型机型:
顶端机:小米11、华为Mate40、OPPO FindX2
高端机:小米8、华为P30、OPPO Find X
中端机:OPPO R17、红米Note 8、华为P20
中低端机:OPPO R11、荣耀8X、 小米5X

◆◆

Unity手游测试机型分布

在本周期的游戏研发团队的测试中,我们统计了项目组在日常研发过程中使用的测试手机品牌和具体型号的占比,反映出游戏研发团队用于性能测试的移动设备的选择偏好。

各品牌的使用占比

游戏研发团队用于性能测试的机型主流品牌依次是华为(21%)、小米(18%)、红米(13%)、Vivo (11%)、三星(10%)和OPPO (10%);由于游戏出海的需求,三星手机的占比依然较高,且在出海的地区中三星的占比远高于小米和Vivo。


Top 20 测试设备(按项目占比计算)

小结:

  • 小米品牌以绝对性优势在测试机型中拔得头筹,Top 3机型分别为小米8、小米11和小米10;
  • 华为品牌的Top 3机型分别是华为P30、华为Mate 30 Pro和华为Mate 20;
  • Top 20机型中没有低端机型。

Top 20 测试设备使用趋势(按项目占比计算)

以小米8、小米10和小米11作为测试机的数量明显提升;
上一年度的低端机代表红米 4X已退出Top 20排名。


FPS均值总体情况

不同档次设备的FPS均值表现

从已有的测试数据看,高达40%的项目帧率在20-30帧之间,29%的项目在45-60帧之间。说明大部分的项目还是趋于30帧的目标做优化,但同时也说明目前已经有较多项目开始以60帧为目标进行游戏开发,高端设备(非顶端)上已经有近37%的项目以60帧作为目标。

在中低端设备上:75%的项目未到达30帧,34%的项目未达到20帧;
在中端设备上:58%的项目未达到30帧;
在高端设备上:44%的项目未达到30帧;
在顶级设备上:38%的项目未达到30帧,5%的项目达到60帧。


不同档次设备的FPS均值走势

顶级设备的帧率(均值)在37帧左右;
高端设备的帧率(均值)在32帧左右;
中端设备的帧率(均值)在29帧左右;
中低端设备的帧率(均值)在24帧左右。


Jank均值总体情况

不同档次设备的Jank值走势

卡顿均值在2022 Q3的表现下滑,后续卡顿值维持在7次/分钟,建议研发团队多使用GOT Online - Overview模式测试,并通过卡顿分析功能来进行检测和优化。


下面我们来具体分析Unity引擎的主流模块的开销情况。

为了能够更好地反映出各个性能参数的整体使用情况,我们统计了每种性能参数的主体使用范围,其范围区间是[5%~95%],以下数据中P5代表5%,P50代表均值,P95代表95%。

◆◆

Unity手游CPU模块性能开销分析

一、渲染模块

URP使用占比走势

在统计的项目中,URP的数量在持续上升,到Q4结束基本上已经超过60%,未来趋势也会越来越明显。建议研发团队在后续的新开游戏项目中,尽可能学习并使用URP功能。


DrawCall数量的主体范围均值

半透明渲染DrawCall主体范围均值

不透明渲染DrawCall主体范围均值

DrawCall Batches数量的主体范围均值

从上述的数据中可以看出,URP项目在通过合理的Batch之后,基本上都控制在了合理范围内,说明SRP Batch的合批效果非常突出,这也是UWA推荐研发团队要深入学习URP的原因。


Triangle数量的主体范围均值

同屏渲染面片数在不同档次的设备上画质分级效果已经并不突出,建议研发团队进一步加大场景、角色建模的复杂度,将模型的细节更加突出。


二、逻辑代码

GC调用频率(帧/次)

仅有27%的项目将GC调用频率控制在1000帧/次以上;54%左右的项目小于600帧/次,说明GC问题依然值得关注。

不同档次设备的GC调用频率

对于GC的优化,建议研发团队一方面继续优化自身逻辑代码的堆内存分配,一方面推荐大家使用Unity引擎的Incremental GC功能,来降低每帧GC的CPU耗时。


三、UI模块

目前我们主要统计了NGUI、UGUI和FGUI的占比情况。UGUI的使用占比不仅强势还在稳步提升,最高时可达85%;依然有7%左右的用户在使用NGUI,FGUI的使用比例在8%左右。

UI 类型占比

UI 类型占比走势


同时,我们以统计范围内最为主流的UGUI来进一步分析。

UGUI耗时均值分布

Canvas.SendWillRenderCanvases CPU耗时均值分布

UI模块的性能开销依然很高,但相较于去年,确实有进一步提升。这主要是在这一年多以来,各大研发团队对于UGUI的理解和掌握都在不断深入。当然,UGUI的使用也会有明显的性能问题,主要有以下四方面:

  1. DrawCall;
  2. 重建;
  3. Overdraw;
  4. 主线程阻塞。

针对以上问题,大家可以通过UWA学堂中UI相关的技术文章和视频进行学习和了解,相信对帮助大家快速提升UI方面的技术理解大有裨益。


四、动画模块

Animators.Update耗时主体范围均值

不同档次设备Animators.Update耗时均值走势

同一档设备的动画性能的趋势表现都较为平稳,说明大家对于动画模块的使用较为合理的。设备动画模块的性能耗时在2022年Q2均有所上涨。
同时,AnimationClipPlayable功能也非常值得研发团队后续研究和关注,它对于动画系统性能方面的提升有很大的潜力可以挖掘。


五、物理模块

Physics.Processing耗时均值的主体范围

物理模块耗时走势

物理模块的整体耗时相对比较平稳,这得益于越来越多的研发团队对于物理引擎开启的必要性做了更深入的了解。
同时,随着大家对于场景和角色物理模拟的逼真度要求越来越高,布料、布娃娃系统相关的插件开始逐步被广泛使用。特别是今年我们关注到不少团队开始使用Magica Cloth并取得了不错的性能效果,因此建议研发团队对其进行研究关注。


六、粒子模块

ParticleSystem.Update耗时的主体范围均值

粒子系统耗时均值走势

不同档次设备粒子系统耗时均值走势

提示研发团队注意两方面:
1)建议针对粒子系统根据不同设备的性能进行不同程度的调整,从而进一步降低粒子系统的CPU耗时和内存占用;
2)针对技能特效建议进行定期自动化地检测,可以参考深圳雷霆的特效自动化检测方案。

◆◆◆

Unity手游内存分布

一、总体内存

PSS内存占用峰值总体情况

不同内存设备的PSS内存占用峰值

PSS内存占用峰值走势

不同内存设备PSS内存占用峰值走势

4G内存以下设备的内存占用(中位值)在800MB-1.0GB之间,4G内存以上设备的内存占用在950MB-1.2GB(中位值)之间,且无论是低端、中端还是高端,整体都呈上升趋势。


二、总体堆内存

Mono内存占用峰值总体情况

不同内存设备的Mono内存占用峰值

Mono内存占用峰值走势

不同内存设备的Mono内存占用峰值走势

总体堆内存一直是项目的内存瓶颈,虽然在过去一年有所起伏,整体堆内存都高达90MB以上,且超过1/3的项目高达120MB。这主要是游戏的重度化所致,但另一方面也是研发团队对于Mono堆内存分配疏于管理所致,例如配置文件的序列化库使用不当。
Mono内存不太受机型的分档而有分级,且趋势较为平稳。
只有46%的项目做到了Mono峰值小于80MB,说明该问题不容小觑,且在低端设备上瓶颈较大。

项目的内存占用很大一部分来自于资源的使用,下面我们将对项目中主流资源的使用情况进行分析。


三、纹理资源内存

纹理内存占用峰值总体情况

不同内存设备的纹理内存占用峰值

纹理内存占用峰值走势

不同内存设备的纹理内存占用峰值走势

虽然硬件设备和画质要求在不断提升,但大家在高内存设备上的画质分级的设计上还不够明显,效果差异尚未拉开。


ASTC/ETC格式纹理覆盖率走势

ASTC/ETC格式纹理运行时数量占比走势

使用ASTC格式的项目越来越多,且自身资源的数量在项目中的占比也在快速升高。
ASTC已经成为目前国内市场的主流格式;如果考虑出海,则需要考虑ETC2格式。


四、网格资源内存

网格内存占用峰值总体情况

不同内存设备的网格内存占用峰值

网格内存占用峰值走势

不同内存设备的网格内存占用峰值走势

网格峰值内存的中位数使用内存均在25MB以下,该值偏低,由于设备内存在不断增加,研发团队可以考虑进一步加大场景、角色建模的复杂度,将模型的细节更加突出。


五、动画资源内存

动画片段内存占用峰值总体情况

不同内存设备的动画片段内存占用峰值

动画片段内存占用峰值走势

不同内存设备的动画片段内存占用峰值走势

动画模块的内存使用趋势在2023年Q1有明显的上升,峰值内存的均值长期维持在20MB之内。


六、Shader资源内存

Shader内存占用峰值总体情况

不同内存设备的Shader内存占用峰值

Shader内存占用峰值走势

不同内存设备的Shader内存占用峰值走势

Shader资源内存峰值大幅上升的主要原因是不少项目进行了Unity版本的升级,属于正常现象。Unity 2019.4.21以后,Shader的内存统计发生了变化。原来统计在ShaderLab中的内存现在也被算在Shader资源本身了。

这里,UWA仍然需要提醒的是,Standard Shader在大家的项目中被经常误引入进来,建议大家在UWA性能简报中的“具体资源使用信息”中特别关注Standard Shader的使用情况。

同时,也建议研发团队结合本地资源检测服务,对Shader相关的规则做检测,尤其是变体数量。


七、RenderTexture资源内存

RenderTexture内存占用峰值总体情况

不同内存设备的RenderTexture内存占用峰值

不同内存设备的RenderTexture内存占用峰值分布

RenderTexture内存占用峰值走势

不同档次设备的RenderTexture内存占用峰值走势

不同档位机型上的RenderTexture内存占用都有波动,且在RT的效果分级上取得了一定的成效。


八、粒子系统资源内存

粒子系统内存占用峰值总体情况

不同内存设备的粒子系统内存分布占用峰值

不同内存设备的粒子系统内存分布占用峰值

粒子系统内存分布占用峰值走势

不同档次设备的粒子系统内存分布占用峰值走势

粒子系统的使用数量在逐步提升,并在Q4有明显的回落,保持在10~20MB之间,说明粒子系统的分级未见成效。
同时研发团队可以考虑在高端设备上使用GPU Particle 新功能,将大幅度提升粒子模块的性能。

同时,UWA推出的本地资源检测服务,针对项目工程中的静态资源(比如纹理、网格、音频、动画以及粒子系统、代码设置等等)可做检测,来检测美术资源是否有哪些资源设置不合理,做到静态资源的及时问题反馈、及时修复。


以上就是UWA发布的2022年度Unity手游性能测评汇总和分析。我们深信数据是会说话的,总有规律值得我们追溯求实、鉴往知来。同时我们也会不断细化评析的标准、分类等,让数据更具有代表性和说服力。

本报告中的数据最终解释权归侑虎科技所有。