一種完美的動畫實現方案

動畫,對于任何一個前端工程師來說,都是一項可敬可畏的工作。好的動畫,可以讓應用、網站增色不少。然而,要將動畫一絲不差地實現在對應平臺上,并不是一件容易的事情。

在實現動畫前,動畫設計師會給出動畫源文件,但是要實現這些動畫,要么選擇性能不佳的序列幀(內存、CPU占用大),要么則選擇 Hard-Code 的方式實現,這些代碼一般來說要幾千行,并且難以維護。

因此,我們所遇到的情況就是,幾乎每個應用都在削減動效……

作為直播應用的前端,當然也遇到這種問題,并且,這種問題同時影響著用戶體驗與營收。我們遇到的首先是禮物動畫,禮物動畫的尺寸是 500px * 500px,15 FPS 持續 4 秒。以往,使用幀動畫的方式播放此類動畫,內存、CPU開銷居高不下。而使用代碼的形式實現動畫,幾乎是不可能的事情。(點此查看動畫 Sample

于是,一年前,YY UED 團隊決定改變這種現狀。

現在,我們自豪地將 SVGA 推薦給大家,SVGA 正是解決以上問題的終極方案。SVGAConverter 可以將 Flash 以及 After Effects 動畫導出成 .SVGA 文件(實際上是 ZIP 包),供 SVGAPlayer 在各平臺播放,SVGAPlayer 支持在 iOS / Android / Web / ReactNative / LayaBox 等平臺、游戲引擎播放。

SVGA 做的事情,實際上,非常簡單,Converter 會負責從 Flash 或 AE 源文件中提取所有動畫元素(位圖、矢量),并將其在時間軸中的每幀表現(位移、縮放、旋轉、透明度)導出。 Player 會負責將這些信息還原至畫布上。

因此,你會發現,SVGA既有序列幀的特點,又有元素動畫的特點。Player 邏輯極度簡單,她只負責粗暴地將每一個元素,絲毫不差地渲染到屏幕上,而無須任何插值計算。(我們認為,任何插件計算的邏輯都是復雜的)

也因此,你會發現,SVGA 不同于 Lottie,Lottie 需要在 Player 一層完整地將 After Effects 所有邏輯實現,而 SVGA 則將這些邏輯免去。也因此,SVGA 可以同時支持 Flash,我們相信 Flash 以及其繼承者 Animate CC 仍然有強大的生命力,以及完善的設計生態。

SVGA 最初的目標是為降低序列幀動畫開銷而生的,因此,性能問題一直是 SVGA 關注的焦點。如果你可以深入地探究 SVGA 的實現方式,你會發現,SVGA 實質上做了一件非常重要的事情。她會在動畫播放前,一次性地上傳所有紋理到 GPU,接著,在播放的過程中,這些紋理會被重復使用。CPU 與 GPU 交換的次數大大減少,同時,紋理的數目也在可控范圍。內存、CPU、GPU 占用能達到最優狀態。

如果你現在還在猶豫是否要使用 SVGA,不妨先打開 SVGA 網站查看 Sample。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容