Unity-內(nèi)置著色器的用途和性能
Unity 中的著色器是通過__材質(zhì)__來使用的,材質(zhì)本質(zhì)上結(jié)合了著色器代碼與紋理等參數(shù)。此處提供了關(guān)于著色器/材質(zhì)關(guān)系的深入說明。
當(dāng)選擇材質(zhì)本身或選擇一個使用材質(zhì)的__游戲?qū)ο骭_時,材質(zhì)屬性將顯示在?Inspector?中。材質(zhì)檢視面板 (Inspector) 如下所示:

每種材質(zhì)在 Inspector 中看起來會有所不同,具體取決于其使用的具體著色器。著色器本身決定了可在 Inspector 中調(diào)整的屬性類型。有關(guān)材質(zhì)檢視面板的詳細說明,請參閱材質(zhì)參考頁面。請記住,著色器是通過材質(zhì)實現(xiàn)的。因此,著色器定義將要在 Inspector 中顯示的屬性時,每種材質(zhì)實際上包含來自滑動條、顏色和紋理的調(diào)整數(shù)據(jù)。在這方面要記住的最重要的一點是,可在多個材質(zhì)中使用單個著色器,但單個材質(zhì)不能使用多個著色器。
性能注意事項
有許多因素會影響游戲的整體性能。本頁面將專門討論內(nèi)置著色器的性能注意事項。著色器的性能主要取決于兩個方面:著色器本身以及項目或特定攝像機使用的渲染路徑。有關(guān)編寫您自己的著色器時的性能提示,請參閱?ShaderLab 著色器性能頁面。
渲染路徑和著色器性能
在 Unity 支持的渲染路徑中,延遲著色和頂點光照路徑具有最可預(yù)測的性能。在延遲著色中,每個對象通常被繪制一次(無論哪些光源影響它)。同樣,在頂點光照中,每個對象通常被繪制一次。因此,著色器的性能差異主要取決于它們使用的紋理數(shù)量以及它們執(zhí)行的計算。
前向渲染路徑中的著色器性能
在前向渲染路徑中,著色器的性能取決于著色器本身和場景光照這兩種因素。以下部分將進行詳細介紹。從性能角度看,有兩種基本的著色器類別:__頂點光照 (Vertex-Lit)__ 和__像素光照 (Pixel-Lit)__。
前向渲染路徑中的__頂點光照__著色器總是比像素光照著色器的成本更低。這些著色器同時使用所有光源基于網(wǎng)格頂點來計算光照。因此,無論在對象上有多少光照,都只需要繪制一次。
__像素光照__著色器計算繪制的每個像素的最終光照。因此,必須繪制一次對象以獲取環(huán)境和主方向光,并針對每次額外光照繪制一次對象。因此,方案為 N 個渲染 pass,其中 N 表示照射在對象上的最終像素光照數(shù)。這種方案增加了 CPU 處理和發(fā)送命令到顯卡以及在顯卡上處理頂點并繪制像素的工作負載。像素光照對象在屏幕上的大小也會影響繪制該對象的速度。對象越大,繪制得越慢。
所以,像素光照著色器會帶來性能成本,但這樣的成本可產(chǎn)生一些出色的效果:陰影、法線貼圖、漂亮的鏡面高光和光照剪影,不一而足。
請記住,可強制光照進入像素(“重要”)或頂點/SH(“非重要”)模式。在像素光照著色器上照射的任何頂點光照都將基于對象的頂點或整個對象進行計算,并且不會計入與像素光照關(guān)聯(lián)的渲染成本或視覺效果。
一般著色器性能
內(nèi)置著色器的復(fù)雜程度從低到高的順序大致如下:
無光照 (Unlit)。這只是一種紋理,不受任何光照的影響。 *頂點光照 (VertexLit)。
漫射 (Diffuse)。
法線貼圖 (Normal mapped)。此項比漫射的成本略高:增加了一個紋理(法線貼圖)和一些著色器指令。
鏡面反射 (Specular)。此項增加了鏡面高光計算。
法線貼圖鏡面反射 (Normal Mapped Specular)。同樣,此項比鏡面反射的成本略高。
視差法線映射 (Parallax Normal mapped)。此項增加了視差法線貼圖計算。
視差法線貼圖鏡面反射 (Parallax Normal Mapped Specular)。此項增加了視差法線貼圖計算和鏡面高光計算。
移動端簡化著色器
此外,Unity 還有幾個針對移動平臺的簡化著色器,位于“Mobile”類別下。這些著色器也適用于其他平臺,因此如果能容忍使用它們經(jīng)過簡化這一事實(例如近似鏡面反射、無每種材質(zhì)的顏色支持等),可嘗試使用它們!
要查看每個著色器已進行的具體簡化情況,請查看“內(nèi)置著色器”包中的?.shader
?文件,此文件頂端的一些注釋中列出了相關(guān)信息。
移動端著色器中常見的一些更改示例如下:
著色器沒有用于著色的材質(zhì)顏色或主色。
對于采用法線貼圖的著色器,使用了基礎(chǔ)紋理的平鋪和偏移。
粒子著色器不支持?
AlphaTest
?或?ColorMask
。有限的功能和光照支持,例如,一些著色器僅支持一個方向光。