PAG 4.1 版本新增支持微信小程序,新增支持多个常用 AE 特性,如图层样式-渐变叠加、蒙版-羽化和不透明度、 亮度轨道遮罩/亮度轨道反转遮罩等。经过 2 个多月 6 个版本的迭代,PAG 4.1 版本已经趋于稳定,目前广泛应用于 QQ、小红书等头部 APP,现正式发布,欢迎大家接入使用。
4.1 版本主要修改内容
平台支持
新增支持微信小程序,目前 PAG SDK 已完成覆盖 iOS、Android、macOS、Windows、Linux、Web 和微信小程序等常用平台。
AE 特性新增支持
· 图层样式-渐变叠加
· 蒙版-羽化和不透明度
· 亮度轨道遮罩/亮度轨道反转遮罩
· 文本路径选项:路径、反转路径、垂直于路径、强制对齐、首字边距、末字边距
API 接口更新
· PAGText 增加支持 leading 和 tracking 修改
· PAGView 增加 makeSnapshot 接口,支持在 PAGView 层面获取单帧渲染数据
制品库变更
· 从 4.1 版本开始,版本号位数由之前的 4 位修改为 3 位
· iOS 端移除 avmv7 架构支持
问题修复
· 修复文本渲染模糊问题
· 修复 Android 平台外部字体注册获取失败 crash 问题
· 修复 Android 平台 ManagerFragment 获取失败引起的 crash 问题
· 修复 Android 平台部分特效场景使用 crash 问题
· 修复内存申请失败引起的 pag 文件解码 crash 问题
· 修复 Android 平台 glBufferData 使用过程中的 OOM 问题
· 修复 Web 端异步任务时 getLayerType 崩溃的问题
· 修复 Web 端多个视图使用同一个 Canvas 时销毁视图崩溃的问题
· 修复 Web 端 BMP 预合成大于 4K 分辨率时无法播放的问题
· 修复 Web 端视频解码器静态区间暂停错误的问题
· 修复 Web 端页面不可见时视频解码器播放错误
4.1 版本部分功能解读
微信小程序版本
得益于微信小程序 v2.13.0 版本开始支持类似于 Web 标准 WebAssembly 的 WXWebAssembly,在 PAG 支持 Web 平台之后,经过一段时间的努力,基于 WXWebAssembly 我们实现了 PAG 的第一个小程序版本。渲染实现框架同样基于 PAG 的 C 层代码,API 接口和效果与其它平台保持一致。和 Web 平台一样,我们同样需要最大化使用平台端能力来优化包体,但小程序平台 API 的差异让我们产生了不同的设计方案。
例如:
(1)Web 平台我们通过 VideoElement 实现了硬件加速解码视频的能力,但小程序平台有着更方便的 API VideoDecoder,通过 VideoDecoder 我们能准确地拿到每一帧的数据,在 VideoDecoder 之上我们封装了 VideoReader 的工具类,进行预解码缓冲,确保 BMP 预合成流畅播放。
(2)小程序平台 WebGL 存在无法直接上传其它 Canvas 纹理的情况,在绘制文字和 mask 的时候,需要通过 getImageData 获取纹理数据再上传到 WebGL,从而导致性能上有所损耗,表现不如 Web 平台。
这是小程序的第一个版本,在目前的规划中,小程序版本未来将实现基于 Worker WebAssembly 优化多 PAG 同屏播放等优化功能,预计这些优化完成后性能是可以优于 Web 移动端平台的。
部分 AE 新增特性展示
蒙版-羽化
图层样式-渐变叠加
亮度遮罩
总结
PAG 4.1 版本新增支持了微信小程序,实现了所有常用平台(iOS、Android、macOS、Windows、Linux、Web 和微信小程序)的覆盖,同时新增支持了最近设计师高频提出的一些 AE 特性,如渐变叠加、 蒙版-羽化和不透明度、亮度轨道遮罩/亮度轨道反转遮罩等。PAG 4.2 版本我们将聚焦在最近开发同学频繁提出的 UI 列表场景性能问题,推出一个优化版本及在该场景下的推荐实现方案。PAG 的未来发展离不开大家的参与,欢迎大家积极参与到需求建议、问题反馈和源码共建中来,帮助我们持续打造更加完善的动效工作流。
微信公众号:PAG 动效
已正式开源
Github 地址:https://github.com/Tencent/libpag
如果想了解、接入 PAG,欢迎访问 PAG 的官网或微信公众号
或加入 QQ 群进行用户交流&官方互动:893379574