網格最佳化中,你遇到過哪些吃效能的設定?
節前,我們已經將【效能黑榜】上的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%的對手!》
相關文章
- 在效能測試的過程中會遇到哪些問題?
- Python網路爬蟲出現亂碼的原因有哪些呢?你遇到過嘛!Python爬蟲
- 作為Java程式設計師,你遇到過哪些質量很高的Java面試!Java程式設計師面試
- 談一談你知道的前端效能最佳化方案有哪些?前端
- 程式設計師都遇到過哪些誤解?程式設計師
- 你見過哪些優雅的 Java 程式碼最佳化技巧?Java
- Navicat Mac 網格偏好設定的方法Mac
- 透過Github同步你的VScode設定GithubVSCode
- 如何處理六西格瑪過程中遇到的問題?
- Java 效能調優:最佳化 GC 執行緒設定JavaGC執行緒
- Vue中的EventBus使用時你遇到過這個問題嗎???Vue
- 網站效能最佳化網站
- CDN在網際網路直播中的運用與效能最佳化
- 回轉壽司你一定吃過!——Android訊息機制(處理)Android
- 回轉壽司你一定吃過!——Android訊息機制(分發)Android
- 回轉壽司你一定吃過!——Android訊息機制(構造)Android
- 什麼是網格變形?HyperWorks網格變形設定方法
- WiFi 6無線網路卡最佳化設定WiFi
- 網站建設的技巧都有哪些你知道嗎?網站
- 部落格效能最佳化筆記 | 99分筆記
- [20221125]設定hugepages遇到的問題.txt
- 如何設定一個嚴格30分鐘過期的SessionSession
- Android中Button設定background過程的研究Android
- 技術轉管理,你遇到了哪些困惑?
- 面試官: 說一下你做過哪些效能優化?面試優化
- CSS Grid 網格佈局邊框設定CSS
- 部落格設定
- 網格最佳化:潰堤之穴,一個也不能放過
- 線上教育平臺建設過程中,直播功能需從哪些方面最佳化?
- 6 個 K8s 日誌系統建設中的典型問題,你遇到過幾個?K8S
- 我的SimpleMemory部落格設定
- Java面試中,遇到這類面試題最吃虧!Java面試題
- 中科三方:設定SSL證書升級HTTPS對網站最佳化有哪些影響?HTTP網站
- 爬蟲過程中遇到的問題爬蟲
- 你開發過程中,都有用過哪些虛擬機器?虛擬機
- unity中Mesh網格程式設計Unity程式設計
- 電腦設定平衡cpu的效能和功耗的設定教程
- 網頁設計:淺談網頁基本效能最佳化規則小結網頁