網格優化:潰堤之穴,一個也不能放過

侑虎科技發表於2020-10-21

在之前的《網格優化中,你遇到過哪些吃效能的設定》一文中,我們簡單講解了在專案開發過程中容易被忽略的網格相關的屬性設定。無論是大家在開發時的疏忽,還是相關知識點的缺失,這些問題的積累最終都會反映到專案的效能表現上。為此,我們將這些規則列出,並且以一個個知識點的形式逐一解讀。

今天,我們來繼續剖析【UWA本地資源檢測】中和網格設定相關的規則:“Normal屬性的網格”“開啟Read/Write選項的網格”“蒙皮網格骨骼數過大”。我們將力圖以淺顯易懂的表達,讓職場萌新或優化萌新深入理解。


1、包含Normal屬性的網格

網格優化:潰堤之穴,一個也不能放過

本條規則針對的是網格的Normal屬性。在實際運用中,如果網格涉及到了光照、陰影等的應用與計算,那麼就需要在網格中匯入Normal屬性,以達到更好的例如高光、漫反射等表現效果。

和前文講述的網格Tangent屬性類似,Normal屬性匯入後會對空間和載入效能造成影響。所以在不需要的情況下,我們最好去除網格資源冗餘的Normal屬性。


2、開啟Read/Write選項的網格

網格優化:潰堤之穴,一個也不能放過

網格優化:潰堤之穴,一個也不能放過

如同Tips裡面指出的,Read/Write 選項啟用後,將會允許CPU對網格的頂點、三角形等屬性進行讀寫,這就需要在記憶體中產生網格資料的副本,便於對網格進行實時的編輯和修改,用來達成例如某些網格的動態效果的展示。下圖所展示的Demo就在Runtime使用指令碼對Mesh屬性進行了動態地修改:

網格優化:潰堤之穴,一個也不能放過

開啟Read/Write後,一個網格資料就會有接近2倍的記憶體消耗。不需要進行動態編輯和修改的網格一旦開啟了Read/Write選項,就會產生不必要的記憶體開銷。

本條規則會篩選出所有開啟了Read/Write選項的網格,以供開發團隊進行相應的選項關閉和優化。需要提醒的是,對於需要呼叫函式StaticBatchingUtility.Combine進行合批的Mesh,以及部分Unity版本中粒子系統裡使用到的Mesh,它們的Read/Write選項依然需要保持開啟。

UWA曾對網格資源進行過相關的深度解析和對比測試,大家可以參考一下相關的文章:《Unity載入模組深度解析(網格篇)》


3、蒙皮網格骨骼數過大

網格優化:潰堤之穴,一個也不能放過

對於帶有SkinnedMeshRenderer的模型,UWA本地資源檢測會掃描其繫結的骨骼。

如果模型的骨骼數量較大,那麼在執行時會有較高的效能開銷,從而對整體的專案效能造成影響。對於該規則目前UWA給的推薦閾值為50,我們建議研發團隊對模型的骨骼數進行限制,將該類美術資源的效能開銷控制在一個合理的範圍內。

需要說明的是,每一項檢測規則的閾值都可以由開發團隊依據自身專案的實際需求去設定合適的閾值範圍,這也是本地資源檢測的一大特點。同時,也歡迎大家來使用UWA推出的本地資源檢測服務,可幫助大家儘早對專案建立科學的美術規範。

網格優化:潰堤之穴,一個也不能放過

萬行程式碼屹立不倒,全靠基礎掌握得好!

效能黑榜相關閱讀

《那些年給效能埋過的坑,你跳了嗎?》
《那些年給效能埋過的坑,你跳了嗎?(第二彈)》
《掌握了這些規則,你已經戰勝了80%的對手!》

相關文章