新四季網

騰訊什麼部門研發遊戲軟體(騰訊研發出新招)

2023-09-15 18:07:01

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的安裝和操作都十分簡單,無論是設計師和開發工程師都能快速上手。

,
同类文章
葬禮的夢想

葬禮的夢想

夢見葬禮,我得到了這個夢想,五個要素的五個要素,水火只好,主要名字在外面,職業生涯良好,一切都應該對待他人治療誠意,由於小,吉利的冬天夢想,秋天的夢是不吉利的
找到手機是什麼意思?

找到手機是什麼意思?

找到手機是什麼意思?五次選舉的五個要素是兩名士兵的跡象。與他溝通很好。這是非常財富,它擅長運作,職業是仙人的標誌。單身男人有這個夢想,主要生活可以有人幫忙
我不怎麼想?

我不怎麼想?

我做了什麼意味著看到米飯烹飪?我得到了這個夢想,五線的主要土壤,但是Tu Ke水是錢的跡象,職業生涯更加真誠。他真誠地誠實。這是豐富的,這是夏瑞的巨星
夢想你的意思是什麼?

夢想你的意思是什麼?

你是什​​麼意思夢想的夢想?夢想,主要木材的五個要素,水的跡象,主營業務,主營業務,案子應該抓住魅力,不能疏忽,春天夢想的吉利夢想夏天的夢想不幸。詢問學者夢想
拯救夢想

拯救夢想

拯救夢想什麼意思?你夢想著拯救人嗎?拯救人們的夢想有一個現實,也有夢想的主觀想像力,請參閱週宮官方網站拯救人民夢想的詳細解釋。夢想著敵人被拯救出來
2022愛方向和生日是在[質量個性]中

2022愛方向和生日是在[質量個性]中

[救生員]有人說,在出生88天之前,胎兒已經知道哪天的出生,如何有優質的個性,將走在什麼樣的愛情之旅,將與生活生活有什么生活。今天
夢想切割剪裁

夢想切割剪裁

夢想切割剪裁什麼意思?你夢想切你的手是好的嗎?夢想切割手工切割手有一個真正的影響和反應,也有夢想的主觀想像力。請參閱官方網站夢想的細節,以削減手
夢想著親人死了

夢想著親人死了

夢想著親人死了什麼意思?你夢想夢想你的親人死嗎?夢想有一個現實的影響和反應,還有夢想的主觀想像力,請參閱夢想世界夢想死亡的親屬的詳細解釋
夢想搶劫

夢想搶劫

夢想搶劫什麼意思?你夢想搶劫嗎?夢想著搶劫有一個現實的影響和反應,也有夢想的主觀想像力,請參閱週恭吉夢官方網站的詳細解釋。夢想搶劫
夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂什麼意思?你夢想缺乏異常藥物嗎?夢想缺乏現實世界的影響和現實,還有夢想的主觀想像,請看官方網站的夢想組織缺乏異常藥物。我覺得有些東西缺失了