Unity3D Shader性能排行


 

整體上,性能由高到低:

 

  1. Unlit,僅為紋理,光線不產生效果
  2. VertexLit
  3. Diffuse  漫反射
  4. Normal Mapped 法線貼圖
  5. Specular 高光
  6. Normal Mapped Specular
  7. Parallax Normal Mapped
  8. Parallax Normal Mapped Specular

 

另外,unity3d還內置有一些簡化的用作移動平台的shader/着色器。

 推薦文章 內置shader詳解(帶圖)

Shader性能影響因素:

着色器性能影響因素較多,最主要有二:

  • shader本身
  • Rendering Paths  (渲染路徑?)

 

 性能最優的兩款 內置着色器:

  • Deffered shader
  • Vertex Lit

僅做繪制一次,性能只取決於紋理數。

 

在Forward rendering path:

性能僅取決於shader本身和場景中光源。

  • Pixel Lit   性能更差,效果更好,多次繪制,故能實現(陰影,法線,高光等)
  • Vertex Lit 性能更佳,所有燈光影響僅繪制一次

 

對內置Shader的通俗理解(轉):

 1.Vertex-Lit:
基於:  基於頂點計算的光照模型
正方體: 【直接照射到的地方不會非常亮】【光照照射不到的平面無效果】
圓形:   【直接照射到的地方非常亮】【光照照射不到的地方有高光效果】
支持:  設備自動選擇【可編程管線】和【固定管線】
參數:  【主色color】【SpecColor光照顏色】【EmissiveColor自發光顏色】【Shininess光照強度】
渲染代價: 比較小

 

2.Diffuse:
基於:  基於簡單的光照模型 lambertian
正方體: 【直接照射到的地方會非常亮】【光照照攝不到的平面無效果】
圓形:   【直接照射到的地方非常亮】【光照照射不到的地方無效果】
支持:  設備需要支持【可編程管線】如果不支持將自動使用【Vertex-Lit】
參數:  【主色color】
渲染代價: 比較小

 

3.Specular
基於:  和Diffuse相同的光照模型,多了一個觀察角度相關的反射高光(#pragma surface surf BlinnPhong)
正方形: 【直接照射到的地方會非常亮】【光照照攝不到的平面無效果】【觀察角度和光入射角度會產生反射光】
圓形:  【直接照射到的地方非常亮】【光照照射不到的地方無效果】【觀察角度和光入射角度會產生反射光】
支持:  設備需要支持【可編程管線】如果不支持將自動使用【Vertex-Lit】
參數:  【主色color】【SpecularColor反射光照顏色】【Shininess反射光照強度】
渲染代價: 比較大

 

4.Bumped Diffuse
基於:  和Diffuse相同的光照模型,同時使用了法線貼圖normal mapping技術(UnpackNormal)【灰度圖,白色表示凹起,黑色表示凹進】
正方形: 和【Diffuse】一樣,【多了凹凸感】
圓形:  和【Diffuse】一樣,【多了凹凸感】
支持:  如果設備不支持,將自動使用【Diffuse】
參數:  【主色color】【多了法線貼圖】
渲染代價: 比較大

 

5.Bumped Specular 凹凸反射
【Bumped Diffuse】與【Specular】的合並
支持:  如果設備不支持,將使用【Specular】

 

6.Parallax Diffuse
基於:  和Bumped Diffuse一樣的光照模型lambertian,也使用normal mapping技術(UnpackNormal),同時使用HeightMap(ParallaxOffset)實

現更加逼真的凹凸感【高度圖在法線貼圖的alpha通道保存,全黑表示么有高度,白色表示高低】
支持:  設備無法使用,會自動使用【Bumped Diffuse】
參數:  【主色color】【多了法線貼圖】【多了高度貼圖】【height設置高度參數】
渲染代價: 比【Bumped Diffuse】更大

 

7.Parallax Specular
基於:  使用【Bumped Specular】+【高度圖】
支持:  設備無法使用,會自動使用【Bumped Specular】

 

8.Decal  【貼花】
基於:  與Diffuse一樣基於Lambert,增加第二張貼圖,然后融合色彩(lerp)覆蓋在主紋理之上【注:DiffusDetail的融合是rgb*rgb】
支持:  設備需要支持【可編程管線】如果不支持將自動使用【Vertex-Lit】
參數:  【主色color】【兩張貼圖】

 

9.Diffuse Detail 【細節貼圖】
基於:  與Diffuse一樣基於Lambert,多了一張貼圖與之融合(rgb*rgb),一般用於地形,攝像機拉近時額外的細節會出現。
說明:         Detail 紋理是覆蓋在主紋理上面的。Detail 紋理中深色的部分將會使得主紋理變深,而淡色的部分將會使主紋理變亮, Detail 紋

理通常是淺灰色。(與Decal 里面 Decal 紋理不同的是,Decal 紋理是 RGBA,通過 alpha 控制 DecalTexture 與 Main Texture 的融合,而 Detail

的紋理是 RGB,直接是兩張紋理的rgb 通道分別相乘再*2,就是說,Detail 紋理中顏色數值 = 0.5 不會改變主紋理顏色,>0.5 會變亮,<0.5 加深)

 

參考

參考文章 shader實例(五)如何在unity中更好的運用shader

參考文檔 Usage and Performance of Built-in Shaders

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM