2020年開始,突如其來的疫情讓線上生活形式飛速發展,短視頻平台成了廣大網民休閑娛樂、學習技能、分享生活的重要途徑。
根據CNNIC發布第48次《中國互聯網絡發展狀況統計報告》顯示,截至 2021 年 6 月,我國網絡視頻用戶規模達 9.44 億,其中短視頻用戶規模為 8.88 億,占網民整體的 87.8%,人均單日使用時長為 125 分鐘。
在日益壯大的短視頻用戶基數下,短視頻平台為了吸引更多流量,動畫設計師和開發需要不斷高效各類創意的特效,以滿足用戶多元的内容需求。
動畫是影響用戶交互很重要的一環,現在各平台實現動畫很少會采用原生代碼實現,那樣開發成本太高,周期太長。目前業界常用的動畫工作流解決方案有Lottie和SVGA,都可以将Adobe After Effects(簡稱AE)制作的動畫導出成一個文件,在終端APP中加載渲染使用,在一定程度上提升了動畫開發上線的效率。
基于以上背景,再給大家推薦一款騰訊研發的優秀動畫制作組件:開源動畫渲染庫PAG。
l 一、什麼是PAG官方定義:PAG(Portable Animated Graphics) 是一套完整的動畫工作流。提供從AE導出插件,到桌面預覽工具PAGViewer,再到各端的跨平台渲染 SDK。
下圖為PAG工作流示意,流程類似Lottie,設計師使用AE設計好動畫以後,通過PAGExporter插件讀取AE工程文件,根據具體需求選擇矢量導出、BMP預合成、混合導出方式中的一種導出一個PAG二進制文件,客戶端對該PAG二進制文件進行解碼、渲染,各端共享一套C 實現,平台端隻做接口封裝。
l 二、PAG的優勢
對比市面上動畫組件SVGA和Lottie,PAG具有以下幾個特性:
l 動畫文件小,解碼速度快
l 可實現所有的AE效果
l 配套工具完善,支持實時預覽效果
l 運行時可保留動畫效果并實時編輯文字或内容
1、動畫文件小,解碼速度快
PAG 方案從設計之初就把文件格式擺在了最重要的位置,目标是打造成為 AE 動畫内容的标準承載格式。
相比 Lottie 方案采用的 JSON 數據結構,PAG 借鑒了經曆數十年行業考驗的 SWF 開源文件格式,采用了更加嚴謹的二進制數據結構。天然的具有壓縮率更高, 解碼速度更快,以及可單文件交付(不外挂圖片)的優勢。
另外在文件大小上,PAG 通過利用動畫文件本身的特點,獲得了極高的壓縮率。通過跳過大量默認值的存儲,使用比特位來緊湊存儲,相同動畫内容可以比同類型方案平均減少50%左右的文件大小。在性能方面,PAG 的實時渲染性能平均可以達到 Lottie 的 1.5 到 2.5 倍左右。
2、全AE特性支持
Lottie 僅支持矢量的導出方式,但矢量方式主動隻能實現 AE 特性的一個較小子集。PAG
不僅在矢量導出方式上支持更多的 AE 特性,還引入了視頻序列幀結合矢量的混合導出能
力,實現支持所有 AE 特性的同時,又能保持動畫運行時的可編輯性。
3、配套工具完善,支持實時預覽效果
不同于Lottie、SVGA,PAG關于動畫的渲染繪制是在C 層實現的,通過自研的2D圖形渲染庫,不依賴平台端渲染接口,可以實現各平台的渲染一緻性。
桌面預覽工具PAGViewer确保了渲染結果跟移動端完全一緻,這樣設計師可以直觀地看到移動端的展示效果,而不需要上線來回确認。同時提供性能檢測面闆,幫助開發工程師根據素材量化的性能指标進行優化。
l 三、PAG的技術能力詳解
接着介紹下PAG優勢對應的技術解決方案:
1、 BMP預合成為了實現AE特性的全面支持,PAG采用了 AE的SDK 截圖文件導出的形式,這樣可以導出任意AE效果,但也有兩個顯著缺點:1、導出文件過大;2、圖片不可編輯
Ø 文件大問題解決方案
針對截圖後文件過大的問題,PAG組件通過擴展視頻格式,将原圖片序列幀壓縮到近百分之一的大小,再通過支持透明通道,如下圖所示,左邊為RGAB的視頻内容,右邊為Alpha通道的灰度圖,最終渲染的時候再合并回RGBA的圖片,從而實現對透明通道的支持。渲染的過程中,由于啟用了硬件加速解碼,可以直接得到一個YUV的紋理。而且為了避免紋理在CPU和GPU之間來回拷貝,自定義了Shader腳本,利用硬件加速在一次繪制過程中,同時完成YUV轉換和Alpha通道合并。平均提高了10%的渲染性能。
Ø 圖片編輯問題解決方案
針對BMP預合成無法編輯的特點,PAG将BMP預合成支持的粒度由文件延伸到合成,支持矢量和BMP預合成混合導出,從而實現了支持所有的AE特性又能保持運行時的可編輯性。
2、 圖層編輯在智能模闆時代,如一鍵出片、王者戰報,模闆不再是單個PAG文件,而是由多個PAG文件随機組合而成,根據業務需求去控制組合的規則。由此PAG引入了圖層渲染數的編輯架構,不僅支持文本和占位圖比編輯,還支持圖層級别的編輯。
如下圖,一個文件就是一棵渲染樹,支持圖層級别的任意修改位置甚至增删圖層,也支持将其他PAG文件添加到這棵渲染樹中作為子樹。在時間軸的組合上,PAG具有時間伸縮的能力,包含循環,變速,定格等多種自适應模式。每個圖層又提供了起始時間的調整能力,能夠自由設置在時間軸上的相對位置。
3、 整體視頻渲染
Lottie的動畫方案之所以無法應用在視頻合成中,主要是因為依賴了平台相關的UI框架,開發成本低,,但也導緻了它隻能渲染到UI視圖上,并且無法在子線程中使用。
為了支持離屏渲染繪制、子線程渲染,PAG直接基于C 跨平台架構研發,一直從最底層的動畫插值器,還原到上層的時間軸和圖層渲染樹系統,雖然開發成本較高,但是所有端共享同一套代碼,天然的能保障跨端渲染一緻性。最重要的是能直接渲染到離屏紋理上,并完美支持子線程動畫渲染。
4、 服務端渲染前面提到,PAG的渲染是基于C 層實現,平台側僅提供渲染環境和接口的封裝。在實際使用中,出于成本的考慮,大部分的服務器仍然是CPU的服務器,GPU的服務器大多應用于AI計算等場景。
AE中的部分特效如高斯模糊、邊角定位等都是通過OpenGL實現的,使用skia的CPU渲染模式無法渲染;除了Linux端,其它平台都可以很好的使用GPU渲染進行加速,如果服務端采用CPU渲染模式,在代碼層面需要做一系列的兼容處理。為了能兼顧渲染性能和使用成本,PAG通過CPU模拟GPU的方式來提供OpenGL渲染環境,并且通過主流Mesa和Swiftshader兩種方案的性能對比,采用了Swiftshader的渲染方案。
文件名 |
總幀數 |
CPU渲染 |
Mesa |
swiftshader | ||
單幀平均耗時(us) |
單幀平均耗時(us) |
Mesa/CPU |
單幀平均耗時(us) |
swiftshader/CPU | ||
replacement.pag |
60 |
2585 |
27630 |
10.689 |
13702 |
5.301 |
particle_video.pag |
240 |
9867 |
47833 |
4.848 |
17622 |
1.786 |
template.pag |
298 |
50432 |
300672 |
5.962 |
64142 |
1.272 |
shanzi_video.pag |
399 |
63150 |
388089 |
6.146 |
78097 |
1.237 |
audio_pre.pag |
500 |
30296 |
489803 |
16.167 |
37075 |
1.224 |
GPU渲染方面,外部隻需要提供EGL環境,就可以完成GPU渲染。
l 四、總結PAG提供了一套簡化并完善的動畫工作流,在縮小文件體積的情況下,仍然支持所有 AE 特性,并保留了動畫運行可編輯的靈活性。僅需接入一次,設計師就可以快速上手使用所有高效組件,不再因研發成本削弱呈現效果。
目前,PAG方案已經廣泛應用于騰訊公司内外幾十款産品中,涵蓋了衆多的國民級應用,如微信、QQ、騰訊視頻、QQ音樂、王者榮耀、QQ空間等。
并且騰訊PAG在1月14日正式開源,現在可以介入SDK使用,設計師和開發小哥哥們可以妥妥的用起來了!
在官網就可以下載體驗,附上官網鍊接:https://pag.io
附錄——簡要使用介紹l 如何安裝PAG :
目前PAG支持mac(macOS 10.9以上)和windows操作系統,安裝和使用都很簡單,以mac系統為例,首先需要安裝PAGViewer,選擇圖形化安裝即可;然後打開 PAGViewer,PAGViewer 将自動檢測是否需要安裝/更新 AE 導出插件,按提示安裝即可。也可查看使用鍊接:https://pag.io/docs/install.html
接着就可以安裝AE導出插件:
l 如何導出PAG文件?
a.導出全矢量預合成的PAG文件
點擊選中需要導出的合成(Composition),然後點擊菜單“文件” -> “導出” -> “PAG File...”,選擇要保存的路徑即可導出。導出成功後雙擊導出的PAG文件可以直接預覽動畫。
b.導出全BMP預合成的PAG文件
将需要導出的合成(Compostion)修改為後綴為"_bmp"或"_BMP"的名字,标記總合成為「BMP預合成」,其他操作同上矢量導出模式。(注:BMP預合成後綴可以更改,詳見《插件選項配置面闆)》
c.導出矢量和BMP預合成混合的PAG文件
可将總合成(Composition)命名為不帶"_bmp"或"_BMP"後綴的名字,它所引用的部分子合成命名為帶"_bmp"或"_BMP"後綴的名字,然後按正常流程導出PAG文件即可。
總體來說,PAG的安裝和操作都十分簡單,無論是設計師和開發工程師都能快速上手。
,