软件和应用|王者QQ微信都在用的动画神器要开源了:把交付时间缩短90%( 四 )


PAG背后的技术门道
Dom表示,PAG早期最有挑战的地方,其实就在于“动画文件设计”和“全AE特性支持”这两部分 。
高效动画文件
在输出文件格式方面,已有的JSON等格式存在两大问题:解码速度慢、压缩率低 。
为此,团队重新设计了一种名为.pag的文件格式,采用二进制数据结构来存储动画信息 。
一方面,二进制数据结构不需要做字符串匹配、序列化等操作,解码速度会比JSON等格式的文件快上许多 。测试数据显示,在解码速度上,PAG格式的动画文件要比JSON文件快12倍 。
另一方面,相比于JSON,二进制数据结构具有更高的压缩率 。
JSON文件导出的冗余信息较多,而二进制的数据结构则能跳过大量默认值存储,并使用动态比特位来紧凑存储 。因此相同的动画内容,PAG文件比同类型方案压缩文件小50%左右 。
此外,采用二进制数据结构还有一个额外的好处,在导出动画文件时不用再搭配“图片包”(外挂图片),一个文件就能搞定,包括音频也能够内置 。
软件和应用|王者QQ微信都在用的动画神器要开源了:把交付时间缩短90%
文章图片


全AE特性支持
说完文件格式,再来看看PAG文件是如何做到支持所有AE效果的 。
这个特性使得PAG文件既能实时预览复杂特效,又能确保动画的可编辑性,但在之前,它们并不能同时被实现 。
这是因为传统的动画的导出模式有两种,即矢量导出和序列帧导出 。
矢量导出的动画文件具有可编辑性,但缺点是一些复杂特效无法在移动端实时预览,因此无法做到全AE特性支持 。
序列帧导出基于截图的原理解决了这个问题,也就是将复杂的视觉动效全部截成图片,再实现导出 。但这就导致文件大小可能高达几十上百兆,对移动端而言“又大,又没法编辑” 。
为了让文件既可以编辑,又能保证精彩动态效果的实现,PAG的研发人员们想到了混合导出的方法 。
简单来说,就是给不需要可编辑性的图层打标记 。这样在导出时,需要保留编辑性的图层就会以纯矢量形式被导出,而打了标记的图层,则以序列帧的方式导出 。
软件和应用|王者QQ微信都在用的动画神器要开源了:把交付时间缩短90%
文章图片


值得一提的是,为了尽可能压缩导出文件的大小,PAG团队还自己设计了bmp预合成的格式,充分利用了视频的极限帧间压缩能力,并在此基础上扩展了对透明通道的支持 。
再加上渲染方面的优化,最终,相比于传统图片序列帧,视频序列帧格式的文件大小可以降低到原来的1.24%左右 。
软件和应用|王者QQ微信都在用的动画神器要开源了:把交付时间缩短90%

推荐阅读