動畫可以輔助視覺制作焦點,引導注意力的方向,越來越為廣大視覺設計師青睞。從設計工具上來看,既有Framer.js、Origami, 也有交互原型類 Principle、Flinto,還有 Figma 自帶動畫演示功能的工具,但是對于一些視覺特效、非邏輯表達類動畫,設計師通常會借助 AE 完成。
遺憾的是,從 AE 制作到落地開發,至今也沒有一種完備且成熟的跨平臺解決方案。本文將起點讀書中使用過的從 AE 到落地經驗梳理成文,對比分析不同方案的差異和優劣,辨析其還原程度和性能表現,希望給同行設計師一些參考和借鑒。
- 圖片格式動畫
- 跨平臺解決方案
1. 視覺設計的轉變
從 Facebook 2019上半年的 All White 的改版來看,傳統意義上視覺范疇的 色彩、圖形、質感被最大程度的簡化和提煉:
△ Facebook All White改版
在 All White 的表象之下,設計師解決的問題不再是如何將頁面繪制的更加漂亮,而是著眼于信息本身,思考的是如何通過我們的專業性幫助產品更好的傳達內容。
視覺設計從來不只是解決美丑,它是關于秩序的設計,解決的是如何提煉重點、革除冗余、合理的引導用戶的注意力方面的問題。從 擬物 到 扁平 到 All White ,透過現象看本質,視覺在產品設計中的裝飾感被逐漸減弱,轉向以內容為中心,我們參與和見證著這場轉變。
2. 起點讀書中的動效
起點讀書 7.0 之后,我們更加關注內容層面的設計,使用動畫輔佐視覺、傳遞情感。從動畫設計到落地,如何在緊張短暫的開發周期內上線一直是一個考驗,對此,我們曾嘗試過很多方案,走過不少彎路。
撥開烏云見天日,守得云開見月明。我們將之前的經驗梳理出來,予人玫瑰的同時,也是一次自我復盤。
1. PNG
PNG 序列幀動畫是一種比較原始的動畫類型,通過連續切換一組分解的動畫序列形成動畫。后來為提高性能,發展出雪碧圖(精靈圖),將所有幀動畫合并在一張大圖上,通過位移實現動畫幀切換。
起點讀書早期使用過序列幀:
△?起點讀書打賞
PNG 雖然實現方式較為原始,但確是一種最為穩妥的解決方案,除了圖片體積太大,沒有別的缺點,想必大部分項目中都使用過,這里不多加贅述。
APNG 是從 PNG 基礎上拓展出來的,是一個支持24 位色彩通道和 8 位透明通道的動畫格式,對透明通道的支持非常優秀。
DEMO: https://tinypng.com/images/apng/panda-waving-2x.png
美中不足的是,IE 瀏覽器不支持 APNG,原生尚可,一般項目中用的很少,期待 APNG 未來兼容性能有所改善。
2. GIF
GIF 是除 PNG 之外另外一種比較傳統的動畫格式,僅支持 8bit 彩色,不支持半透明通道,出現的年代久遠,壓縮技術比較差,動畫邊界有明顯的雜邊,一般用在對動畫精度要求不高的地方。
△ GIF vs. PNG
我們比較一下上面 PNG 序列幀轉為 GIF 之后的表現。從文件體積上看,GIF 比 PNG 序列小了 76% 。但是,從動畫細節上看,GIF 的邊界粗糙有鋸齒,且無法消除。
對于比較簡單的動畫,如果只有2個選擇,在沒有透明通道的情況下,選擇 GIF 好于 PNG 。但是,從開發角度看,一些復雜的 GIF 有時會引起周期性的重繪,占用較多的系統內存,有一定性能風險。
3. WebP
WebP 是 Google 開發的一款用于改善 GIF 的新動圖格式,支持 24bit 彩色,能夠呈現透明通道,兼容性較好,在項目中用的比較多。
△?動畫一:WebP vs. GIF
△?動畫二:WebP vs. GIF
我們比較一下 WebP 和 GIF 的差異到底在哪里:
- 文件體積上,WebP 似乎沒有明顯的優勢,對比以上兩組動畫,很難講 WebP 一定更好。
- 效果呈現上,WebP 支持了真正的 alpha 通道(8bit),而 GIF 只有 1bit,所以 WebP 的細節一定更好。
- 兼容性上,WebP 雖不如 GIF, 但也算支持良好,不影響使用。
綜上,WebP 算是一種更完美的 “GIF” 。如果對文件體積不敏感,且沒有更好的動畫解決方案時,使用 WebP 是個不錯的選擇。
除了 WebP,還有一種 WebM ,多見于游戲類網站,比如《爐石傳說》的 Landing Page https://hs.blizzard.cn/landing ,WebM 僅支持Web,原生不支持。
WebP 導出工具:
https://github.com/bigxixi/webp_apng_exporter_for_AE (文件可以在瀏覽器預覽)
WebM 導出工具:https://www.fnordware.com/WebM/ WebP
4. 小結
通過以上對比分析,圖片格式動畫的體積都比較大。綜合的還原效果、兼容性和性能,WebP 最佳,GIF 幾乎和質量無緣,PNG 過于原始。
1. Lottie
Lottie 庫和插件是 Airbnb 于2017年前后發布的一款跨平臺的動畫解決方案,設計師通過 bodymovin 從 AE 中將動畫導出 json 文件,開發只需將將其導入資源文件夾直接引用即可。
為 UI 而生
Lottie 最早是為了解決矢量圖形類動畫的問題。從官方社區來看,我們能容易發現 Lottie 的矢量基因,社區作品大多是圖形類動畫。
△ Lottie 社區設計師 高岡 圭太 作品
Lottie 發布之后處于持續更新,從 Github 上主干合并頻率來看,大概每周一次,從新版本發布頻率來看,每月一個 bug fix,隔月發布一個新版本,任何 issue 都可以很快響應和解決。
支持部分圖片動畫
Lottie 早期的版本是不支持圖片類動畫的,導出 json 之后會自動生成一個 img 的資源文件夾,播放 .json 文件時,需要解壓資源壓縮包到本地目錄才能正常播放。從 bodymovin V 5.1.15 之后,Lottie 將圖片轉為 base 64 編碼,使用字符代替圖像地址,并封裝在 json 里,直接播放一個 .json 文件,不用再拖著一個資源文件夾了。
△?Bodymovin 5.5.9 資源文件的設置面板
Lottie 當前對圖片類動畫的支持依然會有一些小問題,有時候需要仔細排查出問題的圖層,并對照官方文檔 https://airbnb.io/lottie/#/supported-features,靈活調整動畫替代方案。如果你對 Lottie 開發感興趣,這里有一段 Lottie 安卓開發工程師 Gabriel Peal 的訪談: https://fragmentedpodcast.com/episodes/82/
2. PAG
PAG https://pag.im/ 是騰訊開發者推出的一款面向原生開發的動畫解決方案,為設計師提供 AE 導出插件和桌面預覽工具,支持 AE 一切特效。Lottie 當前對圖片類動畫的支持依然會有一些小問題,有時候需要仔細排查出問題的圖層,并對照官方文檔 https://airbnb.io/lottie/#/supported-features,靈活調整動畫替代方案。如果你對 Lottie 開發感興趣,這里有一段 Lottie 安卓開發工程師 Gabriel Peal 的訪談: https://fragmentedpodcast.com/episodes/82/
為 AE 而生
PAG 將動畫渲染成圖片序列幀,無論是表達式、粒子動畫還是 3D插件,只要 AE 做的出,PAG 都支持。另外,PAG 還完美支持透明通道,動畫體積非常小。
起點讀書今年上半年接入了 PAG 的 SDK,最早用于作品榮譽徽章的展示:
△ 起點讀書榮譽徽章 PAG 文件對比
對于位圖動畫,PAG 有2種導出形式:視頻序列幀和位圖序列幀,視頻序列幀小于位圖序列幀,以上圖為例,視頻序列幀83k,位圖序列幀 234k,前者比后者小 64%。
在使用場景上,視頻序列幀適用于展示型、模態型頁面,位圖序列幀適用于對實時渲染要求較高的 Feeds 型頁面,如果用作列表動畫,可能會出現卡頓。
△ 起點讀書作品徽章 PAG vs. WebP
我們再比較下 PAG 和 WebP,首先,二者用肉眼幾乎看不出顯示方面的差異,但是從體積上看,PAG 僅為 WebP 的十分之一,具有碾壓優勢。
PAG vs. Lottie
PAG 除了對特效類動畫的支持可圈可點,對矢量動畫的支持也是非常優秀,甚至強于 Lottie。以一個生長動畫為例,Lottie 文件 14k,而 PAG 文件只有1k。
△ 起點讀書投月票提醒
另外,PAG 的開發者還提供工具方便設計師調整和預覽動畫參數,不懂 AE 的開發不是好測試:)
△?強大的桌面預覽工具 PAGViewer
PAG 出現的比較晚,目前僅限 MAC 電腦從 AE 導出,系統只兼容到 Android 4.4 以上,低版本需要有兜底方案。另外,PAG 對 Web 的開發還未完成, 當前也沒有正式開源,目前優先騰訊系業務接入,預計明年將正式對外開源。
3. SVGA
SVGA 是 YY 直播的開發工程師 2017 年發布的一套跨平臺動畫解決方案。SVGA 不支持復雜矢量圖形動畫,對位圖動畫的支持超過 Lottie。
為改善 Lottie 為生
SVGA 最初的目標是彌補和改善 Lottie 。筆者通過反復測試發現,SVGA 記錄的是動畫元素在時間軸上每幀的表現,支持的動畫類型比 Lottie 更多, 幾乎支持一切 AE 基礎類動畫。但是更新頻率比較慢,今年只發布了3-4個版本。
SVGA & PAG
SVGA 對基礎類動畫的支持非常優秀,但是筆者發現 SVGA 不支持特效類動畫。
△?起點讀書角色送禮 PAG vs. SVGA(by 亞寧)
以上圖為例,SVGA 僅保留了基礎的縮放動畫,卻丟失了光效和粒子效果。
另外,SVGA 支持動態插入圖片,例如下面左圖中的用戶頭像就是動態插入的,在一些直播類、游戲類產品中比較常見。
△?SVGA 和 PAG 對于動態編輯方面的支持演示
后來,PAG 的開發者受此啟發,借鑒并優化了這種動態編輯的功能,在保留動畫效果前提下,不僅可以替換圖片內容,還可以動態修改文本內容以及字體大小,比 SVGA 更為豐富。
小結
通過以上比較分析,如果只接入一套動畫庫,那么可以考慮 PAG ,PAG 在原生上的表現甚至可以取代 Lottie 和 WebP,但是,在 libpag for Web 開發完成之前,需要借助其他方案協同;非騰訊系產品可以期待明年 PAG 開源,當前可用 WebP、Lottie 和 SVGA 代替。
以上是起點讀書一年來在動畫落地方案的一點經驗,希望對大家有所幫助。從以視覺表現為中心,到以傳達內容為中心,我們也在探索、嘗試和改變,動畫設計只是解決問題的一小步,未來起點讀書還會持續為提升用戶體驗而努力,希望給用戶帶來更多的驚喜,更好的閱讀體驗。
附錄
- 維基百科,APNG https://en.wikipedia.org/wiki/APNG
- 凹凸實驗室,《探究WebP一些事兒》https://aotu.io/notes/2016/06/23/explore-something-of-webp/index.html
- bigxixi ,《BX-WebpApngExporter》 https://github.com/bigxixi/webp_apng_exporter_for_AE
- Lottie 官方 Medium 博客, Introducing Lottie https://medium.com/airbnb-engineering/introducing-lottie-4ff4a0afac0e
- Fragmented Podcast,Lottie Android 開發者 Gabriel Peal https://fragmentedpodcast.com/episodes/82/
- 西西 ,《Lottie 這次更新你應該了解一下》https://zhuanlan.zhihu.com/p/37385550
- DreamPiggy,《客戶端上動態圖格式對比和解決方案》https://zhuanlan.zhihu.com/p/25598828
- Japho ,《優雅的動畫實現方案SVGA、Lottie》 https://www.jianshu.com/p/60d28d7bab48
- Jfson,《Android 動畫庫對比( Lottie 和 SVGA )》https://jfson.github.io/2018/01/08/41-anim/
- SVGA,http://svga.io/
歡迎關注作者的微信公眾號:「閱文體驗設計YUX」
復制本文鏈接 文章為作者獨立觀點不代表優設網立場,未經允許不得轉載。
發評論!每天贏獎品
點擊 登錄 后,在評論區留言,系統會隨機派送獎品
2012年成立至今,是國內備受歡迎的設計師平臺,提供獎品贊助 聯系我們
標志設計標準教程
已累計誕生 729 位幸運星
發表評論 為下方 8 條評論點贊,解鎖好運彩蛋
↓ 下方為您推薦了一些精彩有趣的文章熱評 ↓