Unity載入模塊深度解析之動畫片段
在之前的技術推送中,我們曾為大家深入分析了載入模塊中的紋理、網格、Shader等資源。今天我們繼續該系列,和大家分享在載入動畫片段時需要注意的事項。
請大家持續關注本系列,集齊所有資源類型的深度分析後可以召喚大神哦!這是侑虎科技第143篇原創文章,歡迎轉發分享,未經作者授權請勿轉載。同時如果您有任何獨到的見解或者發現也歡迎聯繫我們,一起探討。(QQ群465082844)
資源載入性能測試代碼
與之前幾篇所提出的測試代碼一樣,我們對於AnimationClip資源的載入性能分析同樣使用該測試代碼。同時,我們將AnimationClip文件製作成一定大小的AssetBundle文件,並逐一通過以下代碼在不同設備上進行載入,以期得到相應的資源載入性能比較。
測試環境
引擎版本:Unity 5.4版本測試設備:三台不同檔次的移動設備(Android:紅米2、紅米Note2和三星S6)
AnimationClip資源
AnimationClip資源是項目運行時最常載入的資源之一,且其載入效率主要由其自身載入量決定,而決定AnimationClip資源載入量的主要因素則是它的壓縮格式。目前,Unity引擎對導入的AnimationClip提供三種壓縮格式,Off、Keyframe Reduction和Optimal。其中,Off表示不採用壓縮處理;Keyframe Reduction表示使用關鍵幀進行處理,Optimal則表示Unity引擎會根據動畫曲線的特點來自動選擇一個最優的壓縮方式,可能是關鍵幀壓縮,也可能是Dense壓縮。
註:關於AnimaitonClip曲線中具體壓縮方法解釋,請查看Unity官方Manual文檔:Unity - Manual: Animator Component測試:不同壓縮格式的AnimationClip資源載入效率測試
我們製作了三組測試用例,AnimationClip資源數量分別為10個、30個和50個。同時,每組AnimationClip又根據其壓縮格式的不同分為三小組:None Compression、Keyframe Reduction和Optimal。我們在三種不同檔次的機型上載入這些AnimationClip資源,為降低偶然性,每台設備上重複進行十次載入操作並將取其平均值作為最終性能開銷。具體測試結果如下表所示。
第1組測試
10個「None Compression」資源、10個「Keyframe Reduction」資源和10個「Optimal」資源,打包成AssetBundle文件後,其文件大小分別為:409KB、172KB和92KB。第2組測試
30個「None Compression」資源、30個「Keyframe Reduction」資源和30個「Optimal」資源,打包成AssetBundle文件後,其文件大小分別為:1.42MB、514KB和312KB。第3組測試
50個「None Compression」資源、50個「Keyframe Reduction」資源和50個「Optimal」資源,打包成AssetBundle文件後,其文件大小分別為:2.46MB、858KB和525KB。通過上述測試,我們可以得到以下結論:
- Optimal壓縮方式確實可以提升資源的載入效率,無論是在高端機、中端機還是低端機上;
- 硬體設備性能越好,其載入效率越高。但隨著設備的提升,Keyframe Reduction和Optimal的載入效率提升已不十分明顯;
- Optimal壓縮方式可能會降低動畫的視覺質量,因此,是否最終選擇Optimal壓縮模式,還需根據最終視覺效果的接受程度來決定。
優化建議
對於資源的優化,我們的建議是防範大於救災!具體可行的方法如下:
- 自己項目組內部寫一個資源檢測工具(或者在Unity Asset Store中查找相關資源檢測工具)來檢查AnimationClip資源的數據信息,檢測其壓縮格式、文件大小是否合理;
- 如果你的項目正在使用UWA性能測評服務,那麼可在「具體資源使用界面」查看AnimationClip資源的內存佔用和動畫時長等參數,從而來定位是否有不合規的AnimationClip資源;
- 如果你的項目正在使用UWA資源檢測服務,那麼可在「資源使用」界面查看AnimationClip資源,重點查看其「Dense曲線數」和「Stream曲線數」。一般來說,只有開啟Optimal壓縮模式的AnimationClip資源才會有「Dense曲線數」。
以上為AnimationClip資源在載入時的性能測試。關於載入模塊的性能問題,我們會不斷推出音頻資源的載入性能分析、資源卸載性能分析、資源實例化性能分析、不同載入方式的性能分析等一系列技術文章,並對目前UWA所檢測過項目的共性問題進行總結,以期讓大家對項目的載入效率有更加深入的認知,並提升對載入模塊的掌控能力。
延伸閱讀
載入模塊之深度解析之紋理篇載入模塊之深度解析之網格篇載入模塊之深度解析之Shader篇推薦閱讀:
※UWA DAY 2017開啟報名
※內存是手游的硬傷——Unity遊戲Mono內存管理與泄漏
※深度緩衝優化指南
※在日本公司做手游,能賺多少?
※他們禁遊戲機的時候,我沒有說話