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

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

在本文中,咱們將聚焦材質相關的優化方面,以《UWA本地資源檢測》中的「包含相同紋理採樣的材質」、「包含純色紋理採樣的材質」和「採樣數過多的Shader」,爲你們簡單講解相關的知識點。咱們將力圖以淺顯易懂的表達,讓職場萌新或優化萌新深刻理解。性能


一、包含相同紋理採樣的材質

在Unity中,紋理(Texture)和材質(Material)不是「一對一」的關係,一個材質內能夠包含多個紋理,只須要在相應的Shader中進行聲明便可。學習

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

固然這種狀況不是廣泛現象,若是有特殊需求,要對同一個紋理進行不一樣方式地採樣運算,或者採集不一樣的部分,那麼對該紋理使用多個不一樣的引用,也無大礙,不會浪費運算資源;可是若是由於疏忽而對同一紋理進行了屢次相同運算,那無疑會增長沒有必要的GPU壓力。spa

因此在本條規則篩選出相關材質後,開發團隊能夠根據實際狀況,查看被檢出資源的合理性。htm


二、包含純色紋理採樣的材質

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

上圖中的純色紋理其實可使用一個Color來替代,從而避免實體紋理形成的內存佔用,減輕GPU對紋理進行採樣的開銷,以更高效的處理方式達到同等效果。ip

因此在本條規則爲你們找出相關材質的同時,開發團隊在從此的研發過程當中也要有意識地提升對純色紋理應用的敏感程度。內存


三、紋理採樣數過多的Shader

在上面的規則中咱們提到,能夠在Shader中聲明紋理。簡單的代碼以下圖。資源

經過Shader中代碼的聲明,材質擁有了多個「插槽」,由此實現了對多個紋理進行引用。但凡事「越多」不必定意味着「越好」。以下圖(圖中材質僅僅爲說明此條規則而建立,並不是真實項目使用的案例):

一方面,一個材質所採樣的不一樣的紋理數過多,勢必會增大包體佔用空間。而若是大量的紋理參與到了Shader的運算當中,那麼其運行時的顯存佔用與計算消耗也會對項目總體帶來不小的壓力。

另外一方面,每個「插槽」中其實都有着一張默認的白色純色紋理,在「供大於求」的狀況下,相關Shader一旦參與了項目的實際運行,這些未被使用的「插槽」上的默認紋理天然會形成內存和計算上的浪費。

因此本條規則會過濾出那些紋理採樣數過多的Shader,以方便開發團隊對相關Shader和材質進行「瘦身」。


但願以上這些知識點能在實際的開發過程當中爲你們帶來幫助。須要說明的是,每一項檢測規則的閾值均可以由開發團隊依據自身項目的實際需求去設置合適的閾值範圍,這也是本地資源檢測的一大特色。同時,也歡迎你們來使用UWA推出的本地資源檢測服務,可幫助你們儘早對項目創建科學的美術規範。

咱們已支持Luacheck功能啦~
咱們已支持粒子特效檢測~
這麼多實用貼心的功能
大家還沒用起來嗎?


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

性能黑榜相關閱讀

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

相關文章
相關標籤/搜索