Shader分類
Shader按管線分類一般分爲固定渲染管線與可編程渲染管線
1. 固定渲染管線 這是標準的幾何&光照(Transforming&Lighting)管線,功能是固定的,它控制着世界,視,投影變換及固定關照和紋理混合.T&L管線可以被渲染狀態控制,矩陣,光照和採製參數.功能比較有限,基本所有的顯卡都能正常運行.
2. 可編程渲染管線 對渲染管線中的頂點運算和像素運算分別進行編程處理,而無須像固定渲染管線那樣套用一些固定函數,取代設置參數來控制管線.
Unity3D三種Shader對比
三種Shader共同點:
- 都必須從唯一一個跟Shader開始
- Properties參數部分,作用及用法完全相同
- 具體功能都在SubShader裏(
SubShader
子shader,Shader會自上而下運行第一個硬件能支持的SubShader,主要作用是對不同硬件的支持. - 都可以打標籤,例如Tags{“RenderType”=”Opaque”} LOD 200 以及Lighting On等
- 都可以Fallback
- 都可以處理基本的功能,例如光照反射(Dissfuse)以及鏡面反射(Specular).但是Vertex and Fragment和Surface都能實現Fixed function實現不了的高級功能,例如基於uv計算的效果等等.
三種Shader不同點
- Fixed function shader以及Vertex and Fragment Shader在Subshader下面還有Pass{},但是Surface Shader,由於已經將具體內容打包在光照模型了,不能加Pass{},加了會報錯.
- Fixed function shader每句代碼之後沒有分號,但是V&F shader以及Surface shader每句代碼之後都必須加分號
- 核心結構不通
|Fixed function shader|Vertex and Fragment Shader|Surface Shader|
|Material{} 以及SetTexutre[MainTex]{}|
的核心是
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
ENDCG
Fixed function shader | Vertex and Fragment Shader | Surface Shader |
---|---|---|
Material{} SetTexutre[MainTex]{} | CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" ENDCG |
採用unity自帶光照模型Lambert,只需要一個表面處理函數surf即可CGPROGRAM #pragma surface surf Lambert ENDCG
|