材質優化 如何正確處理紋理和材質的關係

2021-10-25 11:18:01 字數 2108 閱讀 3787

在上一期《紋理優化:讓你的紋理也「瘦」下來》中,我們對紋理優化挑選部分知識點和大家作了分享。這些看似細小的知識點,很容易在大家的開發和學習過程中被疏忽,而長期的問題積累最終都會反映到專案的效能表現上。為此,我們將這些規則列出,並且以乙個個知識點的形式向大家逐一解讀。

在本文中,我們將聚焦材質相關的優化方面,以《uwa本地資源檢測》中的「包含相同紋理取樣的材質」、「包含純色紋理取樣的材質」和「取樣數過多的shader」,為大家簡單講解相關的知識點。我們將力圖以淺顯易懂的表達,讓職場萌新或優化萌新深入理解。

在unity中,紋理(texture)和材質(material)不是「一對一」的關係,乙個材質內可以包含多個紋理,只需要在相應的shader中進行宣告即可。

在實際開發過程中,或是因為疏忽,或是因為特殊的計算需求,開發團隊可能會在材質內對同乙個紋理進行多次引用,或者說在多個「槽位」上放置同乙個紋理,如圖所示:

當然這種情況不是普遍現象,如果有特殊需求,要對同乙個紋理進行不同方式地取樣運算,或者採集不同的部分,那麼對該紋理使用多個不同的引用,也無大礙,不會浪費運算資源;但是如果因為疏忽而對同一紋理進行了多次相同運算,那無疑會增加沒有必要的gpu壓力。

所以在本條規則篩選出相關材質後,開發團隊可以根據實際情況,檢視被檢出資源的合理性。

在之前效能黑榜系列的文章《那些年給效能埋過的坑,你跳了嗎?》中,我們對「純色紋理」有過相關的介紹。本條規則在知識點上和「純色紋理」那一條規則的原理是一致的。

上圖中的純色紋理其實可以使用乙個color來替代,從而避免實體紋理造成的記憶體占用,減輕gpu對紋理進行取樣的開銷,以更高效的處理方式達到同等效果。

所以在本條規則為大家找出相關材質的同時,開發團隊在今後的研發過程中也要有意識地提高對純色紋理應用的敏感程度。

在上面的規則中我們提到,可以在shader中宣告紋理。簡單的**如下圖。

通過shader中**的宣告,材質擁有了多個「插槽」,由此實現了對多個紋理進行引用。但凡事「越多」不一定意味著「越好」。如下圖(圖中材質僅僅為說明此條規則而建立,並非真實專案使用的案例):

一方面,乙個材質所取樣的不同的紋理數過多,勢必會增大包體占用空間。而如果大量的紋理參與到了shader的運算當中,那麼其執行時的視訊記憶體占用與計算消耗也會對專案整體帶來不小的壓力。

另一方面,每乙個「插槽」中其實都有著一張預設的白色純色紋理,在「供大於求」的情況下,相關shader一旦參與了專案的實際執行,這些未被使用的「插槽」上的預設紋理自然會造成記憶體和計算上的浪費。

所以本條規則會過濾出那些紋理取樣數過多的shader,以方便開發團隊對相關shader和材質進行「**」。

我們已支援luacheck功能啦~

我們已支援粒子特效檢測~

這麼多實用貼心的功能

你們還沒用起來嗎?

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

《那些年給效能埋過的坑,你跳了嗎?》

《那些年給效能埋過的坑,你跳了嗎?(第二彈)》

《掌握了這些規則,你已經戰勝了80%的對手!》

如何正確處理事情

從周一回去,到今天回來,正好四天。這次父親的手術,中間出現了事故,碰破了動脈血管,造成大出血達到3600ml,幾乎是全身的血量。而且山化醫院沒有血,潞城也沒有,幸好有人及時從長治送血回來,才挽救了父親的生命。還有尿管插的不好,造成尿道損傷的問題。切除腎是乙個大手術,存在較大的風險,而在山化這樣醫療條...

如何正確處理SQL SERVER日誌檔案

正確的處理日誌的方法 壓縮日誌及資料庫檔案大小 特別注意 請按步驟進行,未進行前面的步驟,請不要做後面的步驟 否則可能損壞你的資料庫.一般不建議做第4,6兩步 第4步不安全,有可能損壞資料庫或丟失資料 第6步如果日誌達到上限,則以後的資料庫處理會失敗,在清理日誌後才能恢復.下面的所有庫名都指你要處理...

如何正確處理中病毒後的電腦

如何正確處理中病毒後的電腦 常在河邊走,哪能不濕鞋呢?網際網路上各種病毒在不停的流竄,作為連線在網路上的電腦,儘管我們已經做了各種防範,但還是不能避免,稍不留神就會中招。而現在我們學到的多是如何防範電腦中毒的知識,但是對於已經中毒的電腦如何處理卻知之甚少。下面我們就向大家介紹中毒後一些緊急處理措施。...