1. 程式人生 > >Unity 2018.2功能:可程式設計著色器變體移除

Unity 2018.2功能:可程式設計著色器變體移除

由於著色器變體數量在不斷的增加,播放器構建時間和資料大小會隨著專案複雜度而增加。而通過允許開發人員控制Unity著色器編譯器處理哪些著色器變體,並將其包含在播放器資料中,可大量減少播放器構建時間和資料大小。

可程式設計著色器變體移除功能允許開發人員移除所有包含無效程式碼路徑的著色器變體、去除帶有未使用功能的著色器變體,並建立著色器構建配置,例如“debug”(除錯)和“release”(正式版),這些操作不會影響迭代時間或是複雜性的維護。

儘管學習可程式設計著色器變體移除功能並不簡單,但這個功能卻可以大幅提升團隊效率。

基礎概念與術語
為了理解可程式設計著色器變體移除功能,我們首先要準確理解一些相關概念。


著色器資源(Shader asset):著色器資源是個包含屬性、子著色器、通道和HLSL程式碼的完整原始碼檔案。 著色器片段(Shader snippet):著色器片段是帶有單個著色器階段所有依賴的HLSL輸入程式碼。 著色器階段(Shader stage):著色器階段是GPU渲染管線中的一個特定階段,通常情況下是頂點著色器階段(vertex shader stage)和片元著色器階段(fragment shader stage)。 著色器關鍵字(Shader keyword):著色器關鍵字是個預處理識別符號,用於在編譯時跨著色器擴充套件分支。 著色器關鍵字集(Shader keyword set):著色器關鍵字的特定集合,用來識別特定程式碼路徑。 著色器變體(Shader variant):著色器變體是通過Unity著色器編譯器生成的平臺專有著色器程式碼,變體會根據單個著色器階段中的特定圖形等級、通道、著色器關鍵字集等屬性生成。 超著色器(Uber shader):超著色器是個可以生成多個著色器變體的著色器來源。


計算生成的著色器變體的數量
要使用可程式設計著色器變體移除功能,我們需要對著色器變體這個概念有著清楚的認識,還要了解著色器變體是如何由著色器構建管線生成的。著色器變體的生成數量會與構建時間和播放器著色器變體資料量成正比。著色器變體是著色器構建管線的一個輸出結果。

著色器關鍵字是生成著色器變體的一個重要因素。在使用著色器關鍵字時如果未經過仔細考慮,著色器變體計數可能會呈爆炸式增長,從而大大延長構建時間。

著色器構建管線
Unity中的著色器編譯管線是個黑盒方法,每個專案中的著色器都會在裡面被解析,從而提取著色器片段,收集變體的預處理指令。例如:multi_compile和shader_feature。這會產生一個編譯引數表,每個著色器變體會有一個引數表。


這些編譯引數包含著色器片段、圖形等級、著色器型別、著色器關鍵字集、通道型別和名字等屬性。每個集合編譯引數都會用於製作單個著色器變體。

於是,Unity會通過二個啟發式方法執行自動著色器變體移除通道。首先,該移除過程是基於專案設定進行的。例如:如果虛擬現實支援(Virtual Reality Supported)被禁用,則VR著色器變體會被系統地移除掉。第二,自動移除過程是基於圖形設定(Graphics Settings)中著色器移除(Shader Stripping)部分的配置而定的。

更多unity2018的功能介紹請到paws3d學習中心。連結https://www.paws3d.com/learn/  有疑問還可以加官方群935714213一起討論