1. 程式人生 > 資訊 >王者榮耀、QQ、微信都在用的動畫工具要開源了:把交付時間縮短 90%

王者榮耀、QQ、微信都在用的動畫工具要開源了:把交付時間縮短 90%

給 1 分鐘的王者“擊殺”合集做一系列炫酷動畫,並整合到客戶端的一鍵戰報生成功能中,需要多長時間?就像這樣,帶“開黑局”專屬的轉場動畫,英雄暱稱 KDA 一應俱全:

能在每段“高光”操作出現時,加上一段文字動效渲染氣氛:

還可以在出現“三殺”等極限操作的時候,配合英雄來一把炸場效果:

對於特效設計師和客戶端的開發人員們而言,從設計完成到研發還原效果上線的時間原本應該在一週以上:畢竟設計師不光要在 AE 裡搞定特效設計,還得跟研發人員反覆確認程式碼的效果還原度。碰上特效太複雜、動畫檔案太大等情況,免不了又是一場辦公室 battle……

這種掉頭髮傷感情的事,早已讓程式設計師們坐不住了。這不,他們乾脆搞出了一套自動化工具,用上它最快 4 小時就可以交付上線一個動畫。

而最近,這個由騰訊 PCG 釋出器中臺開發,名為 PAG(Portable Animated Graphics)的工具傳出“即將對外開源”的訊息,更是直接在動畫設計師和研發圈子裡點燃了一把火。畢竟,官方郵箱裡早已塞滿來自外部的 SDK 申請和開源許願貼。

所以,PAG 到底是怎麼一回事,能讓研發和設計師們如此躍躍欲試?

PAG 是什麼?

簡單來說,PAG 是一套完整的動畫工作流。在 PAG 出現之前,理想的移動端動畫製作流程是這樣的:設計師們先用 AE(Adobe Effect)設計出一段動畫效果,匯出動畫效果檔案(gif 或視訊 Demo)並交給研發;然後,研發們嘗試用程式碼還原動畫,渲染出我們在移動端看到的效果。

但實際上,設計和研發的(一整週)工作流程是這樣的:

雙方 battle 的問題包括且不限於:從研發角度來看,並非設計給出的所有特效都能在手機上實現。

如果系統不支援特效實現方式,即使它非常酷炫狂拽,使用者也無法體驗。例如,某個互動特效在安卓和 iOS 上都無法實現,研發就可能把它打回給設計“重做”。除了無法實現的特效以外,難以實現的特效也在“重做”範圍內。如果設計給出的特效不在庫裡、或是排期不允許,最後都得讓設計重做。

即使前兩個需求都滿足,研發還得考慮實現效能等問題,如果實現完發現對效能要求過高,也會被打回去“重頭再來”。

從設計角度來看,並非研發給出的每個解決方案都可以接受。如果一個精心設計的動畫,被研發用另一種方式“拼湊”出來,導致效果看起來很“低階”,就脫離了設計的初衷。

因此設計往往需要和研發反覆 battle 協商,最終確定一個折中的方案,甚至在預覽階段,動畫特效也不一定就能拍板,如果臨時變更需求,研發就又得再來一遍……

這種情況下,PAG(Portable Animated Graphics)作為一套動畫工作流“橫空出世”。它包含三部分:PAG 匯出外掛(PAG Exporter)、桌面預覽工具(PAGViewer)、渲染 SDK,分別用來解決前面提到的三大研發問題。

PAG 匯出外掛

首先,設計師在 AE 中做出一段動畫後,無需再匯出成視訊或 gif 這樣的動畫效果檔案,而是能通過 PAG 匯出外掛,直接將 AE 動畫編碼匯出成一份.pag 格式的動畫檔案。

這個外掛,相當於從源頭上解決了設計與研發之間“來回返工”的問題。當設計檔案中出現系統不支援的 AE 向量特性、或使用了特別影響效能的屬性時,PAG 匯出外掛就會給出修改提示,幫助設計師匯出符合系統要求的動畫檔案。

細節上也有一些好用的地方,例如一鍵設定就能匯出 BMP 預合成、設定佔位圖填充模式等功能,進一步節省設計的時間;

由於匯出的.pag 檔案採用二進位制格式儲存動畫資訊,不僅有效降低了檔案大小,還能讓設計師們往裡面直接放各種素材資源(圖片、音訊等),交付時只用傳送一個檔案。

▲檔案格式長這樣

桌面預覽工具 PAGViewer

然後,設計師在預覽時,就能直接採用 PAGViewer 在 PC 端預覽.pag 動畫檔案的效果。這樣設計師無需等待動畫檔案上線、就能一鍵預覽移動端的動畫效果。還可以直接在 PAGViewer 裡面修改可編輯文字或佔位圖:

除了修改可編輯檔案和預覽效果,PAGViewer 還增加了效能展示面板,裡面包含了 pag 動畫的基本資訊,如時長、幀率、尺寸、bmp 預合成的數量、圖層總數等。

如下圖所示,設計師直接就能通過面板,看到量化的效能指標,來定量評估.pag 檔案的效能,並進行鍼對性優化,避免上線前才發現“效能卡設計”等問題:

渲染 SDK

最後,開發只需要一次性的渲染 SDK 接入就能載入 PAG 檔案,直接在 Android、iOS、mac OS、windows、web、Linux 等常用的平臺端準確還原動畫效果,無需進行額外開發。當然,由於 pag 檔案的可編輯性,開發自己也能直接修改或替換檔案中的文字和佔位圖,不用再在需求上麻煩設計。

一段動畫特效可以被分成‘動畫效果 + 內容’兩部分,‘可編輯性’指的是替換‘內容’部分。

以“滾動的一串文字”動畫效果為例,其中文字資訊是內容,滾動就是動畫效果。pag 可以在保留預設動畫的情況下,做到修改文字的內容,字型,字號,顏色等十幾項屬性。除了文字可以被修改替換,PAG 還提供了佔位圖的替換能力,同樣在保留預設動畫的情況下,不僅可以替換照片,甚至可以直接把視訊也放進佔點陣圖。

這樣一來,不僅避免了設計反覆根據需求修改動畫特效的痛苦,還能將動畫特效運用於視訊剪輯中。像我們在開頭看到的王者特效,包括暱稱和 KDA 其實都可以被一鍵替換,不需要再將對應的動效重新設計一遍。

▲這次是情侶組合(狗頭)

  • 總結一下,PAG 最大的優勢有以下幾點:

  • 輸出動畫檔案極小,比同類型方案平均降低 50%

  • 支援所有 AE 效果匯出,包括第三方 AE 特效外掛

  • 執行時保留動畫效果,實時編輯文字替換佔位圖

  • 提供從匯出、預覽、到效能優化的完善工具鏈支援

  • SDK 覆蓋所有平臺,包含 Web 以及服務端渲染能力

解決的正是當前短視訊特效設計師們最頭疼的幾大痛點。

其實在 PAG 出現之前,業內已經有一些類似的設計外掛,但或多或少存在一點問題。PAG 究竟是怎麼解決它們的?我們與 PAG 的研發團隊、騰訊 PCG 釋出器中臺下編輯子工作組的負責人 Dom 取得了聯絡,瞭解了背後的實現原理。

PAG 背後的技術門道

Dom 表示,PAG 早期最有挑戰的地方,其實就在於“動畫檔案設計”和“全 AE 特性支援”這兩部分。

高效動畫檔案

在輸出檔案格式方面,已有的 JSON 等格式存在兩大問題:解碼速度慢、壓縮率低。為此,團隊重新設計了一種名為.pag 的檔案格式,採用二進位制資料結構來儲存動畫資訊。

一方面,二進位制資料結構不需要做字串匹配、序列化等操作,解碼速度會比 JSON 等格式的檔案快上許多。測試資料顯示,在解碼速度上,PAG 格式的動畫檔案要比 JSON 檔案快 12 倍。

另一方面,相比於 JSON,二進位制資料結構具有更高的壓縮率。JSON 檔案匯出的冗餘資訊較多,而二進位制的資料結構則能跳過大量預設值儲存,並使用動態位元位來緊湊儲存。因此相同的動畫內容,PAG 檔案比同類型方案壓縮檔案小 50% 左右。

此外,採用二進位制資料結構還有一個額外的好處,在匯出動畫檔案時不用再搭配“圖片包”(外掛圖片),一個檔案就能搞定,包括音訊也能夠內建。

全 AE 特性支援

說完檔案格式,再來看看 PAG 檔案是如何做到支援所有 AE 效果的。這個特性使得 PAG 檔案既能實時預覽複雜特效,又能確保動畫的可編輯性,但在之前,它們並不能同時被實現。這是因為傳統的動畫的匯出模式有兩種,即向量匯出和序列幀匯出。

向量匯出的動畫檔案具有可編輯性,但缺點是一些複雜特效無法在移動端實時預覽,因此無法做到全 AE 特性支援。序列幀匯出基於截圖的原理解決了這個問題,也就是將複雜的視覺動效全部截成圖片,再實現匯出。但這就導致檔案大小可能高達幾十上百兆,對移動端而言“又大,又沒法編輯”。

為了讓檔案既可以編輯,又能保證精彩動態效果的實現,PAG 的研發人員們想到了混合匯出的方法。簡單來說,就是給不需要可編輯性的圖層打標記。這樣在匯出時,需要保留編輯性的圖層就會以純向量形式被匯出,而打了標記的圖層,則以序列幀的方式匯出。

值得一提的是,為了儘可能壓縮匯出檔案的大小,PAG 團隊還自己設計了 bmp 預合成的格式,充分利用了視訊的極限幀間壓縮能力,並在此基礎上擴充套件了對透明通道的支援。

再加上渲染方面的優化,最終,相比於傳統圖片序列幀,視訊序列幀格式的檔案大小可以降低到原來的 1.24% 左右。

但從基礎功能的實現,到如今成為一整套完整的工具流,PAG 並非“一蹴而就”。與之相反,雖然 SDK 去年才開始對外開放,但早在 2016 年,PAG 的第一行程式碼就已經寫下。從最初的 1.0 版本迭代到如今的形態,PAG 已經走過了 4 個版本。

“被 battle 出來的產品”

“從寫下第 1 行程式碼,到第 1 次跑通,團隊就用了 6 個月時間。”至於為何要選擇堅持打磨這樣一款工具產品,Dom 提到了一個“回憶殺”的詞語 Flash:

在 Flash 時代,動效開發有一套非常完善的工作流:設計師把動畫製作出來,匯出一個 SWF 檔案,開發人員無需手敲程式碼還原效果,直接匯入就能使用。並且動效裡面的細節是可以調整的。

但到了現在的 H5、移動應用開發裡,很少有工具能夠完整還原這套完善的動畫工作流。

他希望 PAG 能在視訊編輯這樣一個場景裡,把這套工作流帶到移動端動畫製作上,降低或者消除動畫相關的研發成本。

這個想法在市場上也很快有了案例驗證 ——

PAG 專案開始的同一年,支援將向量動畫匯出到各個平臺的 AE 外掛 Lottie 問世。這款外掛的成功問世,證明了還原 Flash 這套設計到研發之間的流暢工作流“跑得通”。

和 PAG 團隊一樣,Lottie 背後的開發者同樣有著深厚的 Flash 相關經驗,只是 Lottie 主要面向 UI 動畫設計,不太適用於短視訊場景。

為了能夠滿足短視訊貼紙動畫以及模板的開發需求,PAG 團隊選擇了繼續自研。6 個月之後,PAG 1.0 版本出爐。

騰訊的設計師們試用後,PAG 團隊得到的反饋是“存在不少問題”,核心概括起來就是:

1.0 版本雖然支援了帶動畫的文字編輯,但僅覆蓋了 AE 的純向量匯出能力,很多複雜動畫效果無法被完整還原。

為此,PAG 繼續迭代出了 2.0 版本:通過混合匯出實現 AE 全特性支援,同時解決了特效和可編輯性的問題。開發團隊還在 2.0 版本引入了佔位圖的能力,為照片模板和視訊模板的生產帶來了工業化量產的能力。

到 3.0 版本時,PAG 在編輯性上進一步探索突破,強化了圖層級別的原子編輯組合能力,支援了從原子特效元件動態構建模板,很好地支撐了遊戲戰報和一鍵出片等動態模板的需求……

這時候,PAG 功能已經相對全面,騰訊內部設計師開始“口口相傳”,將 PAG 主動推薦給外部的其他設計師使用,也因此反饋出了更多的需求。

就在本月,PAG 完成了 4.0 版本的開發,並傳出開源訊號。這個版本耗時近一年時間完成了渲染架構的重大升級,徹底脫離了谷歌的 Skia 2D 繪相簿,SDK 包體也直接下降了 60%。

具體而言,PAG 團隊自研實現了一套輕量純 GPU 繪圖引擎,通過最大化利用平臺端提供的所有能力,以 500K 左右的包體覆蓋了 Skia 的絕大部分功能,並且在介面設計上充分暴露了針對現代 GPU 渲染的優化能力。因此,包體減小的同時,渲染效能的上限實際得到了進一步的提升。

另外,PAG 4.0 版本基於這個全新的 2D 繪圖引擎,也將正式拓展對 Web 端的支援。量子位還獲悉,目前 PAG 4.0 版本已經走完騰訊開源稽核流程。

回過頭看,PAG 的不斷進化,其實也得益於騰訊內部複雜的業務需求。開發團隊與業務方的持續“battle”,使得這套動畫工作流始終貼合著設計師、工程師們最真實的“痛點”。這或許也就是為什麼,明明是一個騰訊內部工具,卻在外部因使用者們的口口相傳打出名氣,被推動著走向開放、開源。

說了這麼多,是時候附上傳送門了。如果你對 PAG 感興趣,現在就可以去官網獲取 SDK。開原始碼也正在路上,可以一起蹲一個~

官網連結:

https://pag.io/