Unity載入模組深度解析(網格篇)

2022-06-22 02:00:13 字數 3763 閱讀 2259

與上篇所提出的測試**一樣,我們對於其他資源的載入效能分析同樣使用該測試**。我們將每種資源均製作成一定大小的assetbundle檔案,並逐一通過以下**在不同裝置上進行載入,以期得到不同硬體裝置上的資源載入效能比較。

測試環境

引擎版本:unity 5.2版本

測試裝置:三颱不同檔次的移動裝置(android:紅公尺2、紅公尺note2和三星s6)

網格資源與紋理資源一樣,在載入時同樣會造成較高的cpu占用,且其載入效率由其自身大小(網格資料量)決定。因此,我們通過選擇不同資料量的網格資源來詳細分析其載入效率。

測試1:不同麵片數的網格資源載入效率測試

我們選取了四種不同麵片數的網格資源,含有的麵片數分別為1k、5k、10k和50k,且不含有tangent頂點屬性。四組網格資源的記憶體占用分別為195kb、0.8mb、1.4mb和3.9mb,其對應assetbundle大小為43kb、108kb、178kb和507kb。

測試網格:

我們在三種不同檔次的機型上載入這些網格資源,為降低偶然性,每台裝置上重複進行十次載入操作並將取其平均值作為最終效能開銷。具體測試結果如下表所示:

通過上述測試,我們可以得到以下結論:

1、資源的資料量對載入效能影響較大,麵片數越多,其載入越為耗時。裝置效能越差,其耗時差別越為明顯;

2、隨著硬體裝置效能的提公升,其載入效率差異越來越不明顯。

測試2:相同麵片數、不同頂點屬性的載入效率測試我們選擇測試1中的網格資源做為該測試的樣本資料,並在打包時加入tangent頂點屬性。則四組網格資源的記憶體占用分別為287kb、1.2mb、2.1mb和5.8mb,其對應assetbundle大小為72kb、228kb、376kb和937kb。與測試1相同,我們在三種不同檔次的機型上重複進行十次載入操作並將取其平均值作為最終效能開銷。具體測試結果如下圖所示:

通過上述測試,我們可以得到以下結論:

1、頂點屬性的增加對記憶體和assetbundle包體大小影響較大。與測試1中未引入tangent頂點屬性的網格資料相比,測試2中的網格資料在記憶體上均大幅度增加(增加量與網格頂點數有關),且assetbundle大小同樣有成倍(1~2)的增加。

2、頂點屬性增加對於載入效率影響較大,且頂點數越多,影響越大。

注意事項:模型常見的頂點屬性主要有position、uv、normal、tangent和color。color屬性與tangent屬性一樣,如果網格頂點擁有該屬性,同樣會對記憶體、物理體積和載入效能造成影響。在使用draw call batching時,切忌將不同屬性的網格模型拼合在一起。舉個例子 ,100個網格模型進行static batching,如果99個模型只有position和uv兩種屬性,而剩下1個模型函式有position、uv、normal、tangent和color五種屬性。那麼引擎在進行拼合時,會將前99個模型的頂點屬性補齊,然後再進行拼合。這樣無形中會增加大量的記憶體占用,從而造成不必要的記憶體浪費。

測試3:開啟/關閉read/write功能的載入效率測試

我們使用測試1中的網格資源資料,並關閉其read/write功能,從而來檢視其read/write功能對載入效率的影響。關閉read/write功能後,四組網格資源的記憶體占用分別為104kb、454kb、0.8mb和2.3mb,其對應assetbundle大小為38kb、94kb、152kb和428kb。與測試1相同,我們在三種不同檔次的機型上重複進行十次載入操作並將取其平均值作為最終效能開銷。具體測試結果如下圖所示:

通過上述測試,我們可以得到以下結論:

1、關閉read/write功能會降低assetbundle的物理大小,其降低量與資源本身資料量相關。同時,關閉read/write功能會大幅度降低網格資源的記憶體占用;

2、關閉read/write功能會略微提公升該資源的載入效率。

通過以上測試和分析,我們對於網格資源的管理建議如下:

1、在保證視覺效果的前提下,盡可能採用「夠用就好」的原則,即降低網格資源的頂點數量和麵片數量;

2、研發團隊對於頂點屬性的使用需謹慎處理。通過以上分析可以看出,頂點屬性越多,則記憶體占用越高,載入時間越長;

3、如果在專案執行過程中對網格資源資料不進行讀寫操作(比如morphing動畫等),那麼建議將read/write功能關閉,既可以提公升載入效率,又可以大幅度降低記憶體占用。

正是由於以上載入效率問題,uwa對每個網格資源引數進行了詳細的分析。通過效能測評和資源檢測兩個工具,對專案在online執行和offline製作階段進行雙重檢測,從而方便加快速檢視資源的使用情況,定位引發效能問題的具體資源。

針對網格頂點資料的檢測,可以通過以下兩種方式:

1. 通過效能測評報告檢視:

2. 通過資源檢測報告檢視:

針對網格頂點屬性的檢測,可通過效能測評報告進行檢視:

針對網格頂點read/write功能的檢測,可通過資源檢測報告進行檢視:

說明:以上測試資料為我們所用的測試網格載入資料,需要指出的是,不同網格資源的載入效率會略有相同,因為其數值的不同會造成assetbundle壓縮包大小的不同,進而造成最終載入效率的不同。同時,需要注意的是,載入方式的不同(乙個協程逐資源載入/多協程同時載入),其載入效率也是完全不同的。關於這一點,我們將在後續文章中進行討論。最後,我們後續會進行更多的測試,以期為大家提供更為普遍的測試結果。

以上為網格資源在載入時的效能測試。關於載入模組的效能問題,我們會不斷推出shader、音訊等其他資源的載入效能分析、資源解除安裝效能分析、資源例項化效能分析、不同載入方式的效能分析等一系列技術文章,並對目前uwa所檢測過專案的共性問題進行總結,以期讓大家對專案的載入效率有更加深入的認知,並提公升對載入模組的掌控能力。

Unity載入模組深度解析(網格篇)

與上篇所提出的測試 一樣,我們對於其他資源的載入效能分析同樣使用該測試 我們將每種資源均製作成一定大小的assetbundle檔案,並逐一通過以下 在不同裝置上進行載入,以期得到不同硬體裝置上的資源載入效能比較。測試環境 引擎版本 unity 5.2版本 測試裝置 三颱不同檔次的移動裝置 andro...

Unity載入模組深度解析之動畫資源

與之前幾篇所提出的測試 一樣,我們對於animationclip資源的載入效能分析同樣使用該測試 同時,我們將animationclip檔案製作成一定大小的assetbundle檔案,並逐一通過以下 在不同裝置上進行載入,以期得到相應的資源載入效能比較。測試環境 引擎版本 unity 5.4版本 測...

Unity載入模組深度解析之動畫片段

與之前幾篇所提出的測試 一樣,我們對於animationclip資源的載入效能分析同樣使用該測試 同時,我們將animationclip檔案製作成一定大小的assetbundle檔案,並逐一通過以下 在不同裝置上進行載入,以期得到相應的資源載入效能比較。測試環境 引擎版本 unity 5.4版本 測...