天天看點

Unity3D内置着色器

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通道定義在物體表面的反射強度。

  任何場景燈光将會增加反射表面的照明。

繼續閱讀