網格優化中,你遇到過哪些吃效能的設定?
節前,我們已經將【效能黑榜】上的Top10規則均做了詳細的解讀(可戳文末相關連結回顧)。無論是大家在開發時的疏忽,還是相關知識點的缺失,這些問題的積累最終都會反映到專案的效能表現上。為此,我們將這些規則曝光出來,並且以一個個知識點的形式逐一解讀。
今天,我們來繼續剖析【UWA本地資源檢測】中和網格設定相關的規則:“包含Color屬性的網格”,“未開啟OptimizeMesh選項的網格”,“包含Tangent屬性的網格”和“包含uv3或uv4屬性的網格”。我們將力圖以淺顯易懂的表達,讓職場萌新或優化萌新深入理解。
1、包含Color屬性的網格
在一些建模軟體中匯出的模型可能會帶有頂點的顏色屬性,在Unity中即表現為Mesh的Colors屬性。有些Shader可以使用這個屬性進行運算與著色,如Sprites Shader。然而大多數Shader都選擇忽略Colors屬性(Unity標準著色器就不使用這個屬性)。在這種情況下,如果Mesh帶有Colors屬性,那麼對其本身而言沒有實際意義,卻會對記憶體、物理體積和載入效能造成影響。
所以本條規則會針對Mesh的Colors屬性進行檢測,以供開發團隊根據實際使用需求去除不必要的Colors屬性。
在此大家可以參考一下UWA問答中一位熱心朋友提供的批量去除網格color屬性的工具:https://answer.uwa4d.com/question/5a8f77970b827e2c0bfdcfaf
2、未開啟OptimizeMesh選項的網格
在模型方向上的網格應用是極為普遍的,在專案的效能開銷上也佔有很大的比重。所以對模型網格的優化也一直是首先考慮的重點。但很多情況下,對模型網格進行調優意味著需要對原有的設計與資源等進行大刀闊斧的改動,從而使得很多開發團隊往往因為難以找到切入點而一籌莫展。
所以Unity為我們提供了一個優化選項:OptimizeMesh。
Optimize Mesh是模型的Import Settings當中的選項。在開啟狀態下,網格的頂點或三角形會按照引擎本身既定的一套規則重新排序,從而使其對於GPU來說在運算時能有較好的效能。理論上如果模型對頂點和麵片順序沒有要求的話,Optimize Mesh的開啟就不會導致顯示問題。
所以UWA設定了這條檢測規則,以方便開發團隊找到這些未開啟OptimizeMesh選項的網格並進行相關的設定優化。
3、包含Tangent屬性的網格
本條規則,其實和上述的“包含Color屬性的網格”那條規則的著眼點是一樣的。Tangent是網格中頂點的屬性中的一項。很多情況下我們的Shader不需要使用這項屬性,會造成記憶體上的浪費。
舉個例子,如果專案中使用了Normalmap,那麼就需要在Shader裡面計算區域性的切空間,這種情況下就會用到網格的Tangent屬性。
除此之外,如果不用Normalmap,一般來講網格的Tangent屬性都是不會被使用到的。所以本條規則會遍歷出包含Tangent屬性的網格,開發團隊在確認不會有相關的使用需求後,就可以在FBX的匯入設定中取消Tangent屬性的匯入。
4、包含uv3或uv4屬性的網格
uv座標又稱為紋理對映座標(texture-mapping coordinates),對應於每個頂點,用於確立模型表面的各個頂點的顏色取樣與紋理上具體位置的對應關係。通俗來講就是將一張圖貼在模型表面,使得我們可以從“紋理”這塊調色盤上找到正確的顏色,來繪製模型。
Unity一共支援4套uv,在c#API中分別叫uv、uv2、uv3和uv4。通常來說(使用c# API中的命名),uv用於主紋理,uv2用於光照貼圖(Lightmap)的取樣,uv3用於實時動態光照,uv4可進行自定義。
uv2可以在建模軟體中新增,也可以在Unity中通過Generate Lightmap UVs的選項來生成。如果在建模軟體中只做了一套uv,將模型匯入Unity的時候,在匯入設定中勾選Generate Lightmap UVs,Unity會自動為我們生成用於光照貼圖的uv2。uv3和uv4的使用較為少見,通常是用來配合特殊的Shader實現特殊的效果。
去除不必要的uv3、uv4屬性可以有效降低模型所佔空間資源,所以UWA用本條規則找出包含uv3或uv4的網格,由開發團隊根據網格的實際使用需求和表現效果的平衡考量,去對網格的uv屬性做減法。
需要說明的是,每一項檢測規則的閾值都可以由開發團隊依據自身專案的實際需求去設定合適的閾值範圍,這也是本地資源檢測的一大特點。同時,也歡迎大家來使用UWA推出的本地資源檢測服務,可幫助大家儘早對專案建立科學的美術規範。
效能黑榜相關閱讀
《那些年給效能埋過的坑,你跳了嗎?》
《那些年給效能埋過的坑,你跳了嗎?(第二彈)》
《掌握了這些規則,你已經戰勝了80%的對手!》
相關文章
- 面試官: 說一下你做過哪些效能優化?面試優化
- 【面經】面試官:做過效能優化的工作嗎?你會從哪些方面入手做效能優化呢?面試優化
- 程式設計師的 13 種噩夢,你遇到過哪些?程式設計師
- 效能優化小冊 - 提高網頁響應速度:優化你的 CDN 效能優化網頁
- 【SQL 效能優化】引數設定SQL優化
- 你見過哪些優雅的 Java 程式碼最佳化技巧?Java
- 關於Unity中的UGUI優化,你可能遇到這些問題UnityUGUI優化
- 作為Java程式設計師,你遇到過哪些質量很高的Java面試!Java程式設計師面試
- 效能優化的過程學習優化
- 通過PureRender和Immutable實現React中的效能優化React優化
- 網站效能優化網站優化
- 網頁效能優化網頁優化
- 網路優化設定的具體步驟優化
- 你必須懂的前端效能優化前端優化
- 程式設計師都遇到過哪些誤解?程式設計師
- iOS開發過程中 效能監控及優化iOS優化
- 資料庫效能優化有哪些方式資料庫優化
- 頁面效能優化辦法有哪些?優化
- 資料庫效能優化有哪些措施?資料庫優化
- Python網路爬蟲出現亂碼的原因有哪些呢?你遇到過嘛!Python爬蟲
- Java 效能優化之——效能優化的過程方法與求職面經總結Java優化求職
- 效能優化漫談之三:效能優化目標的確定和衡量優化
- iOS中UITableView效能優化iOSUIView優化
- sql優化設定SQL優化
- [web前端效能優化]效能優化只有三步,你瞭解嗎Web前端優化
- 大規模服務網格效能優化 | Aeraki xDS 按需載入優化
- 談談你對前端效能優化的理解前端優化
- Java 效能調優:最佳化 GC 執行緒設定JavaGC執行緒
- 網站設計扁平化站有哪些優勢?網站
- 網格優化:潰堤之穴,一個也不能放過優化
- 效能優化漫談之三:效能優化目標的確定和衡量(續)優化
- 九、Android效能優化之網路優化Android優化
- Android 效能優化(八)之網路優化Android優化
- iOS效能優化過程淺析iOS優化
- 這份優化清單,你做了哪些?優化
- Navicat Mac 網格偏好設定的方法Mac
- 新電腦優化設定指南 小白必看的 Win10 優化設定教程優化Win10
- [譯] 拖放庫中 React 效能的優化React優化