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