Unity内部提供了一些可以直接使用的着色器,這些内置着色器包括以下6個方面:
(1)Performance of Unity shaders
着色器的性能和兩個方面有關:shader本身和render path。
Deferred Lighting:每個對象都會被繪制2遍,無論其是否受到光照,性能與紋理數和具體的計算過程有關。
Vertex Lit:每個對象隻被繪制一次,性能與紋理數和具體的計算過程有關。
Forward rendering:性能和燈光數量有關。
Vertex-Lit shader in Forward rendering path:基于每個頂點計算所有光照的影響,隻繪制一遍。
Pixel-Lit shader in Forward rendering path:N rendering passes,每個光照會增加一次繪制,性能和物體在螢幕上的尺寸也有關系。
性能開銷很大,但是可以用來制作一些特殊的效果,比如shadows、normal-mapping、good look specular highlights and light cookies等。
通常的shader性能開銷排序如下:
Unlit 不受光
Vertex Lit 頂點光
Diffuse 漫反射
Normal mapped 法線貼圖
Specular 高光
Normal Mapped Specular 高光法線貼圖
Parallax Normal mapped 視差法線貼圖
Parallax Normal Mapped Specular 視差高光法線貼圖
(2)Normal Shader Family
Specular 高光,強度和camera的觀察角度有關,main_tex的alpha通道可以用來做Specular Map(反射貼圖,也稱Gloss Map),用于定義物體不同區域的反光率的大
小。
Bumped Diffuse 法線貼圖漫反射,使用Normal map來表現物體表面的細節。
Parallax 視差着色器,通過HeightMap來實作,用來模拟高度資訊。這個高度資訊可以包含在Normal Map的Alpha通道裡,也可以單獨包含在一張貼圖裡面。
Decal 貼花着色器,需要主紋理、貼花紋理(帶alpha),用來對主紋理追加紋理,可以用來做塗鴉。性能比Vertex-Lit稍大一點,因為它需要多一張紋理。
Diffuse Detail 漫反射細節着色器,需要主紋理、細節灰階紋理(50%中性灰),細節紋理必須是無縫貼圖(四方連續的)。
細節貼圖是細小的,精緻的紋理在你靠近一個表面的時候可以察覺,可用于地形細節、木紋、石頭紋理等。
(3)Transparent Shader Family
透明着色器用于實作全透明或者半透明效果。
當多層透明時,會出現一些渲染問題。
(4)Transparent Cutout Shader Family
透明镂空着色器使用的對象有完全不透明的,完全透明的部分(無半透明部分)。像鐵栅欄,樹木,草等之類的東西。
帶有Alpha cutoff參數用于控制透明和不透明的範圍。
沒有透明着色器的圖形排序問題,并可以接收和進行投影。
(5)Self-Illuminated Shader Family
主要用于發光物體。
一張主帖圖,一張自發光紋理。
發光基于發光紋理的alpha值,alpha為0的不發光,1表示充分發光。不需要任何燈光照射來發光。
任何頂點燈光或像素燈光将簡單增加更多光照到自發光上。
(6)Reflective Shader Family
一張主帖圖,一個Cubemap用于反射。
主紋理的alpha通道定義在物體表面的反射強度。
任何場景燈光将會增加反射表面的照明。