《星辰奇緣》測評精講

2021-09-21 15:53:05 字數 3003 閱讀 7279

該遊戲在cpu占用方面的效能非常不錯,下圖為該遊戲在紅公尺note2不停打怪時的效能開銷。可以看出,在紅公尺note2上執行的29075幀中,超過33ms的幀數佔比為1.3%,超過50ms的幀數佔比為0.5%。

其整體cpu效能的優秀表現與其各個模組的合理使用是分不開的。下面,我們就詳細講解一下其cpu效能方面的亮點之處。

1. 渲染模組

該遊戲在紅公尺note2裝置上執行時的渲染模組cpu開銷如下圖所示。通過統計,半透明物體渲染的cpu消耗均值為5.9 ms,主要集中在3.1~9.9ms範圍內(5%~95%)。不透明物體渲染的cpu消耗均值為2.0 ms,主要集中在1.4~3.1ms範圍內(5%~95%)。draw call峰值為191,且主要集中在91~155範圍內(5%~95%),該值處於合理範圍之內。

2. 動畫模組

3. ui模組

該遊戲在紅公尺note2裝置上執行時的ui模組cpu開銷如下圖所示。該遊戲的ui模組效率經優化後已經非常出色,經過統計,ui模組總體的cpu占用均值為1.0 ms,主要集中在0.2~3.4ms範圍內(5%~95%),在29000幀+的測試時間內,累積堆記憶體分配總值僅為1.3mb。

目前,大量專案的ui模組cpu占用均很高。我們看到的ui模組開銷,經常是如下圖一般的高開銷、高占用。

對於ugui的效能優化,我們建議你時刻注意以下幾點:

1、盡可能將靜態ui元素和動態ui元素分開,存放於不同的canvas下。同時,對於不同頻率的動態元素也建議存放於不同的canvas中;

2、嚴格控制乙個非靜態的canvas(即canvas中會有元素發生變化)中的ui元素數量,因為canvas中所有的ui元素都會合併到乙個mesh中,一旦某個元素發生變化,則會引起mesh發生變化,從而造成開銷;

3、盡可能減少mask元件的使用,不僅提高繪製的開銷,同時會造成draw call明顯上公升。

4. shader載入該遊戲目前在執行過程中幾乎不存在任何shader解析開銷。下圖為遊戲優化前後shader載入的耗時對比(上圖為優化前開銷,下圖為優化後開銷)。不難看出,該遊戲在優化前存在較大量的shader重複載入開銷,而在優化後則僅在開始處載入一次,後續執行則再沒有shader的載入耗時。對於shader的載入效能分析及優化方案,我們在剛剛推出的載入模組之shader資源中有詳細說明,感興趣的可以進一步閱讀。

《星辰奇緣》在記憶體上的表現同樣突出,如下圖所示。總記憶體峰值為128mb,mono堆記憶體峰值為23.6mb,且內存在遊戲執行過程中表現平穩。

1. mono堆記憶體

從上圖可知,該遊戲的總體mono堆記憶體控制得很好,在29075幀中,mono的堆記憶體峰值僅為23.6mb。該值屬於合理範圍之內(<40mb)。

該遊戲mono堆記憶體分配之所以可以控制得如此之小,主要得益於專案的函式經過了大量的檢測和深度的優化,下圖則為當前遊戲執行29000+幀的函式堆記憶體分配情況。

2. 資源記憶體

經過統計,該遊戲的紋理資源數量峰值為393個,記憶體占用峰值18.9mb。在全部紋理資源中,etc1格式紋理占有199個,rgba16格式紋理有42個,argb32格式資源數共有61個,etc2格式紋理有22個,其餘為n/a紋理(**生成的紋理)。

對於rgba32、rgba16和rgb24格式的紋理,我們建議在視覺效果可以保證的情況下,盡可能使用etc1格式紋理進行替換,不僅可以達到更小的記憶體占用,同時可以獲得更快的載入效率。對於紋理資源的載入效率,我們在之前的載入模組效能文章中進行了詳細的分析和闡述,建議大家進一步檢視,進一步加深載入模組的掌控能力。

3.其他資源的記憶體占用情況

mesh資源:

animationclip資源:

audioclip資源:

以上則為《星辰奇緣》遊戲在cpu效能和記憶體管理方面的具體使用情況。優秀的cpu效能、較低的記憶體分配和合理的資源使用,足以說明該研發團隊具備非常深厚的技術功底和對於引擎相當優秀的把控能力。

最後,非常感謝《星辰奇緣》研發團隊對 uwa 的認可和支援。

Prim演算法精講

對prim演算法有了新的理解,現在此總結一下。我們現在主要講的是實現部分。我們的原點是0,那麼現在u集合中只有0,v u中和0相鄰接的頂點中,最小輕邊是0和2之間的那條,所以選擇2,現在u為0和2,之後我們繼續尋找,通過窮舉法我們找到了5,然後找到了3,然後找到了1,然後找到了4,最後程式結束。按照...

c string函式精講

還有必要再重複一下c 字串和c字串轉換的問題,許多人會遇到這樣的問題,自己做的程式要呼叫別人的函式 類什麼的 比如資料庫連線函式connect char char 但別人的函式引數用的是char 形式的,而我們知道,c str data 返回的字元陣列由該字串擁有,所以是一種const char 要...

ajax post方式 精講

假如現在有這樣乙個表單,是新增元素用的。form id addform action useradd.action type post label for uname 使用者名稱 label input type text name uname id uname br label for mobil...