使用性能监测面板
概述
PAG贴纸现在支持两类导出方式,序列帧导出和矢量导出。序列帧导出方式能支持所有的AE特性,但是文件较大,通常应用在视频合成中或对动画特效有特别要求的场合。矢量导出方式仅能支持部分AE特性,但是文件极小,通常应用在UI上或者需要内容可编辑的场合。
在性能方面,序列帧导出方式产生的PAG贴纸,渲染性能上增加了额外的图片解码耗时,但整体耗时只跟序列帧图片的尺寸有关系。 矢量导出方式可以做到文件大小和性能都到非常优化的极限状态,但是跟设计师具体制作一个动画的方式有很大联系,需要设计师花费额外的工作量不停调优。
PAGViewer上的Profiler性能检测面板可以很直观地帮助设计师进行性能调优。预览贴纸时按下键盘上的P键即可呼出该面板,再次按下关闭面板。
面板上各种信息的含义
FrameRate : 播放帧率,每秒刷新画面的次数。
Duration : 动画时长, 单位为 s(秒)、m(分钟)、h(小时) 。
Graphics : 贴纸播放时占用的显存大小,单位同上。
Videos : 贴纸内视频序列帧的数量。
TagLevel : 贴纸内包含的最高的Tag等级。
Width : 贴纸设计宽度。
Height : 贴纸设计高度。
Layers : 贴纸内包含的图层总数量。
Render : 当前一帧的渲染耗时,单位微秒。
Render(AVG) : 当前面板图像内的平均渲染耗时,单位微秒。
Render(MAX) : 当前面板图像内的最大渲染耗时,单位微秒。
Image : 当前一帧的解码耗时,单位微秒。
Image(AVG) : 当前面板图像内的平均解码耗时,单位微秒。
Image(MAX) : 当前面板图像内的最大解码耗时,单位微秒。
Prensent : 当前一帧的上屏耗时,单位微秒。
Prensent(AVG) : 当前面板图像内的上屏耗时,单位微秒。
Prensent(MAX) : 当前面板图像内的上屏耗时,单位微秒。
波形图每个柱代表某一帧 Render+Image+Prensent 的总耗时,可以根据颜色区分占比。
如何解读利用这些信息
1.TagLevel 用于确认一个贴纸的版本兼容性,即在某个版本的客户端是否能正常播放。客户端 SDK 的 PAGFile.MaxSupportedTagLevel() 要大于等于这个贴纸的最高 TagLevel 才能正常播放此贴纸,否则需要升级 SDK。
2.包含位图的贴纸需要关注尺寸,因为放大可能模糊。全矢量贴纸因为可以无损缩放,不需要关心。目前在视频合成中使用的贴纸为了保证清晰度,若贴纸包含位图要求预合成的最短边必须为720像素。
3.Graphics 显存大小通常跟图层的数量关联较大也跟贴纸实际绘制时缩放的大小有关,所有内容静止只有矩阵变化的图层都会被缓存成纹理,来提搞绘制效率。这个值过高会导致程序显存耗尽而崩溃,通常应该控制在10M左右内。
4.Layers 图层数量主要影响的是显存大小,以及绘制时长。Layer越多复杂度越高,绘制需要的计算量也越复杂。如果存在内容完全相同的图层,应该避免直接复制图层,而是将这些图层做成预合成,然后引用预合成的方式,这样图层数量会只计算一份。
5.Render 渲染耗时通常在是矢量导出的硬性指标,由于这些耗时在每台机器上具体数值都不相同,无法确定出固定值,但可以参考在iMac 27寸电脑上的耗时,需要控制在100微秒左右内。
6.Image 位图解码耗时通常只有序列帧方式导出时才会占用这个耗时。位图解码耗时基本可以认为只跟图片尺寸有关。
矢量贴纸性能优化建议
1.尽可能降低图层复杂度,用简化的方式实现接近的视觉效果,降低总的图层数量。可以多利用预合成方式来复用相同图层而不是直接拷贝。
2.能用普通图形做出来的效果请不要使用遮罩和轨道蒙板,只有确定必须使用它们才能做出效果的情况再使用。如果必须使用遮罩和轨道蒙板,请尽量用简单图形或者简单内容图层去遮罩或蒙板住一个复杂图层,避免反过来操作。
3.图层内容尽可能静止,多使用Transform变换位置大小旋转缩放。例如形状图层,即避免对形状内容打关键帧。
4.其他优化方式可以通过Profiler上的各项参数来直观地尝试,改一下制作方式后观察显存和渲染耗时是否有降低到可接受范围即可。