如何读懂UWA性能报告?—动画篇

简介:


抛砖引例

打开动画模块的界面,我们可以看到更详细的性能数据,下图所示的是某MMO手游在红米2上的性能表现:

UWA Tech Doc
从报告中可以看到,该项主要展示项目运行过程中的 “动画片段数量峰值”、“Animator.Update CPU均值”、“Animation.Update CPU均值” 和 “蒙皮网格更新CPU均值”。其中 Animation.Update 和 Animator.Update 分别表示Unity引擎两个不同动画模块的性能开销。前者对应Unity老版本的动画系统,后者对应Unity新动画系统Mecanim。

在这几个指标之后展示的是蒙皮网格更新的CPU耗时、Animator.Update CPU和Animation.Update CPU耗时,如下图所示。
UWA Tech Doc

关于这两个函数的耗时分布,小编提醒大家一定要查看“分析 & 建议”中主体范围(5%~95%)的数值,一般建议主体范围的CPU开销均小于3ms。

UWA Tech Doc


尽可能使用Mecanim

这里我们先要说明下:在UWA做过的大量性能优化案例中,发现目前使用Unity老版本动画系统的研发团队仍然不在少数。对此,我们建议尽可能使用Mecanim来作为项目的动画模块解决方案。因为Mecanim动画系统主要有以下几点优势:

  1. Mecanim动画系统的多线程计算性能较之老版本的单线程计算性能要高;
  2. Mecanim动画系统可以对GameObject开启 “Optimize Game Object” 选项。该选项为Unity引擎在4.3版本中加入的新功能,旨在优化Mecanim动画系统的底层计算开销。开启该选项,Animator.Update和MeshSkinning.Update的CPU占用均存在一定程度的降低;
  3. Mecanim动画系统的Retargeting功能可以让多个不同的角色使用同一套的AnimationClip资源,比如主城中的NPC角色,其大部分共性动画可尝试使用一套Idle、Wave等动画片段,从而进一步降低动画资源的内存开销;
  4. Unity引擎已经不再对老版本动画系统进行维护。

优化支招

动画模块的开销主要来自于MeshSkinning.Update(蒙皮网格每帧更新)和Animation.Update and Animator.Update(骨骼动画的更新开销)两个函数。关于动画模块的优化,小编给大家支几招:

  1. 研发团队在尽可能保证动画效果的同时,对模型的网格进行简化,建议尝试使用Unity Asset Store中的SimpleLOD插件来对骨骼蒙皮网格进行简化;

  2. 关于MeshSkinning.Update, 一般来说该值的大小取决于蒙皮网格(Skinned Mesh)的面片数和骨骼数。所以如果该值过高,我们的建议是减面。同时我们建议开发团队勾选“GameObject.Optimize”,该方法是将fbx生成的GameObject的层级关系移除,使动画系统不用每帧再去更新这些骨骼节点(GameObject)的Transform,因此能一定程度上降低CPU开销,此优化选项默认是关闭的),该方法特别适合于在配置较低的手机上运用骨骼角色多的情况。

  3. 现在项目对于同屏角色数量的需求越来越大。但是为什么有的项目在红米2上跑30个角色也很卡(一千面、两千面的模型),别的项目却能在同样低端的机型上流畅跑上几十个小兵(甚至七八十个)呢?他们很可能用了SkinnedMeshRenderer.BakeMesh。其原理是将一个蒙皮动画的某个时间点上的动作,Bake成一个不带蒙皮的Mesh,从而可以通过自定义的采样间隔,将一段动画转成一组Mesh序列帧。而后在播放动画时只需选择最近的采样点(即一个Mesh)进行赋值即可,从而省去了骨骼更新与蒙皮计算的时间(几乎没有动画,只是赋值的动作)。整个操作比较适合于面片数小的人物,因为此举省去了蒙皮计算。其作用在于:用内存换取计算时间,在场景中大量出现同一个带动画的模型时,效果会非常明显。该方法的缺点是内存的占用极大地受到模型顶点数、动画总时长及采样间隔的限制。因此,该方法只适用于顶点数较少,且动画总时长较短的模型。同时,Bake的时间较长,需要在加载场景时完成。我们之前测试在红米2上跑了100个不到300面的角色,非常流畅。特别推荐下:该方法比较经典的适用场景为MOBA游戏中的小兵。

  4. 控制场景中具有Animator Controller组件的GameObject,建议通过调整其Culling选项来降低视域体或一定范围外的动画组件更新。




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

目录
相关文章
|
前端开发 JavaScript UED
前端性能的性能指标之首次内容绘制(FCP)
首次内容绘制(First Content Paint)是前端性能的一个重要指标,因为它是用户体验的一部分,并且对于网页的响应速度和可接受性有很大的影响。
397 0
|
2月前
|
编解码 算法 测试技术
在不影响动画质量的前提下对 Lottie 动画文件进行压缩
【10月更文挑战第16天】在不影响动画质量的前提下对 Lottie 动画文件进行压缩需要综合运用多种方法和策略。通过细致的分析、合理的调整和适当的技术手段,可以在保持动画视觉效果的同时,有效地减小文件的大小,提升动画的性能和用户体验。
112 1
|
7月前
|
前端开发 UED 开发者
【专栏】探讨了CSS3动画卡顿的原因,包括复杂动画效果、过多元素参与、低效代码结构和硬件资源限制,并提出优化措施
【4月更文挑战第29天】本文探讨了CSS3动画卡顿的原因,包括复杂动画效果、过多元素参与、低效代码结构和硬件资源限制,并提出优化措施:简化动画路径、控制元素数量、优化代码结构、利用硬件加速及性能监测。通过实际案例展示了优化效果,强调了性能优化对提升用户体验的重要性。在开发中,应持续关注并优化动画性能,以适应网页应用的需求。
391 1
|
数据采集 缓存 数据可视化
Echarts高级进阶教程:图表渲染大数据量导致卡顿加载时间慢等问题的解决方案
Echarts高级进阶教程:图表渲染大数据量导致卡顿加载时间慢等问题的解决方案
1892 0
|
数据采集 监控 数据可视化
做出酷炫的动态统计图表,不一定要写代码
首先这个名字很长的,就是上面 GDP 图表的作者 Jannchie见齐 基于 D3.js 开发的 将历史数据排名转化为动态柱状图图表 的项目,并在 github 上开源了。
内存清理、动画制作、CPU检测等五款实用软件推荐
人类与99%的动物之间最大差别在于是否会运用工具,借助好的工具,能提升几倍的工作效率。
312 0
内存清理、动画制作、CPU检测等五款实用软件推荐
|
JavaScript 前端开发 索引
小程序 多图列表 性能优化
小程序 多图列表 性能优化 写这篇文章的缘由: 最近在公司的小程序项目中遇到了页面图片元素过多导致的性能问题. 从小程序提供的性能检测面板分析, 确定是图片元素占用了过多内存导致. 因为本人之前主要是做桌面端应用开发和原生app开发, 没有太顾及过移动端图片的内存占用问题.
1821 0
|
JavaScript 容器 前端开发
一些JS事件小片段代码整理收集(持续)
一、js实现 1 2 3 4 5 function AcceptData(num){ 6 document.getElementById("accepDate").value+=num; 7 } 8 9 10 11 12 13 14 15 16  二、input输入框的value传值显示 input输入框中用户输入的值,点击按钮显示在另一个容器之中。
1051 0
|
异构计算 图形学 编解码