Unity Shader的ShaderLab語法

Shader簡要概括:

1、Shader在可編程渲染流水線中,所處的位置是頂點着色器和片元着色器,這兩個部分是高度可編程的。

2、Unity的ShaderLab是Untiy特有的着色器編程語言,他是對Cg/HLSL/的一層封裝,是爲了簡化編程而誕生的。

3、Shader腳本和Material密切相關,和Material一起作用在GameObject上。

4、Unity的着色器包括2種類型,一種是表面着色器,一種是頂點/片元着色器。其中表面着色器其實是對頂點/片元着色器的更高一層封裝,它具有簡單,易用性,但同時犧牲了控制的靈活性。需要注意的是頂點/片元着色器的“頂點着色器”和“片元着色器”寫在同個shader文件裏面,兩個不連續的過程之所以可以放在一起,也是因爲Unity爲用戶進行了封裝。

5、一個Shader可以有多個SubShader,但必須至少有一個SubShader。

6、一個SubShader可以有多個Pass,多個Pass可以實現更加複雜的效果。

Shader結構:

    shader結構包含了:聲明,屬性(Properties),SubShader,狀態設置,標籤(tags),Pass,Fallback。

1 聲明:例如 shader "Custom/MyShader" {      }   其中"Custom/"表示文件路徑 "MyShader"表示這個Shader的名字

2 屬性:例如 Properties{  _Int("Int", Int) = 2 }  其中 _Int是在Shader腳本里面的變量名,"Int" 是在Inspector 上顯示的變量名, Int 是變量的屬性,= 是給這個變量默認值。

除了Int類型外,還有Float、Range(min,max)、Color、Vector、2D、Cube、3D。需要注意的是2D、Cube、3D的屬性語句是:

 _2D("2D", 2D) = "white"  {}, 其中"white"是系統內置的紋理,除了“white”還有“black”、“gray”、“bump”。

3 SubShader:SubShader包含了Pass模塊,狀態設置模塊和標籤模塊。Shader可以包含多個SubShader,每個SubShader的渲染級別不同,渲染過程中會選擇最合適的SubShader代碼塊來執行。

4 狀態設置:是ShaderLab提供用於設置渲染狀態的指令。常見的狀態設置有:

  Cull Back | Cull Front | Cull Off :剔除模式:剔除背面/正面/關閉剔除;

  ZTest Less Greater | ZTest LEqual | ZTest GEqual | ZTest Equal | ZTest NotEqual | ZTest Always :深度測試的判斷條件;

  ZWrite On | ZWrite Off :開啓/關閉深度測試;

  Blend SrcFactor DstFactor:開啓並設置混合模式;

5 標籤:是一個鍵值對,用於描述對象的渲染方式,形式如 Tags{ “Queue” = "Transfparent" }常見的Tags有:

  "Queue" = "Transparent" :控制渲染順序;

  "RenderType" = "Opaque" :對着色器進行分類,可用於着色器替換功能;

  "DisableBatching" =  "True" :使用模型空間下的頂點動畫可能會出現問題,指定該SubShader是否可以批處理;

  "ForceNoShadowCasting" = "True" :該SubShader是否會投射陰影;

  "IgnorProject" = "True" :表示物體是否不受Projector的影響,常用於半透明物體;

  “CanUseSpriteAtlas” = "True" :該SubShader用於精靈時,應該設置爲"False";

  "PreviewType" = "Plane" :指明材質面板應該以社麼形狀來預覽模型,一般是球形。

6 Pass:Pass可以包含命名、標籤(Tags)、渲染設置。可以用UsePass命令在其他Shader裏面調用該Pass。

7 FallBack:當shader裏面的所有SubShader都不符合當前運行環境時,便會執行FallBack,它告訴Unity用某個特定的Shader來執行渲染,當然也可以關閉,不使用任何Shader渲染。 例如:FallBack Off / FallBack "Name"。

發佈了53 篇原創文章 · 獲贊 12 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章