软件和应用|王者QQ微信都在用的动画神器要开源了:把交付时间缩短90%( 四 )
PAG背后的技术门道
Dom表示,PAG早期最有挑战的地方,其实就在于“动画文件设计”和“全AE特性支持”这两部分 。
高效动画文件
在输出文件格式方面,已有的JSON等格式存在两大问题:解码速度慢、压缩率低 。
为此,团队重新设计了一种名为.pag的文件格式,采用二进制数据结构来存储动画信息 。
一方面,二进制数据结构不需要做字符串匹配、序列化等操作,解码速度会比JSON等格式的文件快上许多 。测试数据显示,在解码速度上,PAG格式的动画文件要比JSON文件快12倍 。
另一方面,相比于JSON,二进制数据结构具有更高的压缩率 。
JSON文件导出的冗余信息较多,而二进制的数据结构则能跳过大量默认值存储,并使用动态比特位来紧凑存储 。因此相同的动画内容,PAG文件比同类型方案压缩文件小50%左右 。
此外,采用二进制数据结构还有一个额外的好处,在导出动画文件时不用再搭配“图片包”(外挂图片),一个文件就能搞定,包括音频也能够内置 。
文章图片
全AE特性支持
说完文件格式,再来看看PAG文件是如何做到支持所有AE效果的 。
这个特性使得PAG文件既能实时预览复杂特效,又能确保动画的可编辑性,但在之前,它们并不能同时被实现 。
这是因为传统的动画的导出模式有两种,即矢量导出和序列帧导出 。
矢量导出的动画文件具有可编辑性,但缺点是一些复杂特效无法在移动端实时预览,因此无法做到全AE特性支持 。
序列帧导出基于截图的原理解决了这个问题,也就是将复杂的视觉动效全部截成图片,再实现导出 。但这就导致文件大小可能高达几十上百兆,对移动端而言“又大,又没法编辑” 。
为了让文件既可以编辑,又能保证精彩动态效果的实现,PAG的研发人员们想到了混合导出的方法 。
简单来说,就是给不需要可编辑性的图层打标记 。这样在导出时,需要保留编辑性的图层就会以纯矢量形式被导出,而打了标记的图层,则以序列帧的方式导出 。
文章图片
值得一提的是,为了尽可能压缩导出文件的大小,PAG团队还自己设计了bmp预合成的格式,充分利用了视频的极限帧间压缩能力,并在此基础上扩展了对透明通道的支持 。
再加上渲染方面的优化,最终,相比于传统图片序列帧,视频序列帧格式的文件大小可以降低到原来的1.24%左右 。
推荐阅读
- 欺诈|贝宝、LG电子宣布与IBM量子合作,量子应用多领域
- 综合|应用于高校机电故障综合模拟平台组成部分
- 爆发|从1G到5G 技术成熟与应用爆发相辅相成
- Apple|大量Wordle“克隆”应用已从苹果App Store中消失
- 应用开发商|苹果拟在韩国提供其他支付选择
- 软件和应用|Locket跃居App Store榜首:将情侣/闺蜜/好友照片放到iOS主屏上
- 毫米波|从1G到5G 技术成熟与应用爆发相辅相成
- Samsung|刚刚关闭手机应用商店的Tizen 仍是三星的“底牌”
- Apple|苹果妥协 将在韩国允许应用开发者采用第三方支付
- 新浪数码|苹果妥协 将在韩国允许应用开发者采用第三方支付