如何读懂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
转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。

目录
相关文章
|
10月前
|
前端开发 JavaScript UED
前端性能的性能指标之首次内容绘制(FCP)
首次内容绘制(First Content Paint)是前端性能的一个重要指标,因为它是用户体验的一部分,并且对于网页的响应速度和可接受性有很大的影响。
298 0
|
9月前
|
数据采集 缓存 数据可视化
Echarts高级进阶教程:图表渲染大数据量导致卡顿加载时间慢等问题的解决方案
Echarts高级进阶教程:图表渲染大数据量导致卡顿加载时间慢等问题的解决方案
1350 0
内存清理、动画制作、CPU检测等五款实用软件推荐
人类与99%的动物之间最大差别在于是否会运用工具,借助好的工具,能提升几倍的工作效率。
253 0
内存清理、动画制作、CPU检测等五款实用软件推荐
|
Web App开发 JavaScript 前端开发
国内第一篇讲如何减少卡顿的代码级别详细文章
国内第一篇讲如何减少卡顿的代码级别详细文章
127 0
国内第一篇讲如何减少卡顿的代码级别详细文章
|
缓存 算法 图形学
项目优化之DrawCall优化(Unity3D)
在游戏发开中我们都遇到过这些问题。我们将试着分析新的图形,图像压缩,新代码,这有用吗?这反而会浪费我们大量时间和成本。最终,我们尝试用一些奇葩的解决方案或者直接放弃。 在这里,我们将尽可能的减少我们的过失,我宁可说这是一个失误,也不愿意说这个一个错误,然而主要元凶就是Draw Call。 在我们解决Draw Call过多的问题之前,先来理解一下什么是Draw Call。
|
XML 存储 Android开发
【Android 性能优化】布局渲染优化 ( CPU 与 GPU 架构分析 | 安卓布局显示流程 | 视觉与帧率分析 | 渲染超时卡顿分析 | 渲染过程与优化 )
【Android 性能优化】布局渲染优化 ( CPU 与 GPU 架构分析 | 安卓布局显示流程 | 视觉与帧率分析 | 渲染超时卡顿分析 | 渲染过程与优化 )
368 0
【Android 性能优化】布局渲染优化 ( CPU 与 GPU 架构分析 | 安卓布局显示流程 | 视觉与帧率分析 | 渲染超时卡顿分析 | 渲染过程与优化 )
|
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输入框中用户输入的值,点击按钮显示在另一个容器之中。
1005 0
|
异构计算 图形学 编解码

相关实验场景

更多