命名shader
語法:
Shader ?" where/name "{ ?}
"/"的左邊決定"name"這個shader會放在哪個(where)面板下
如果是shader"Custom/MyShader"{ ?}
位置為:Shader ? —> ?Custom ?—> ?MyShader
屬性(承接材質和shader)properties
語法:
properties{
? ? ? ? ? ? Name("display ?name",PropertyType) = ? ?DefaultValue
? ? ? ? ? ? Name("display ?name",PropertyType) = ? ?DefaultValue
? ? ? ? ? ? //更多屬性
}
shader中的屬性名字“Name”需要在前面添加一個下劃線
而“display name”是在材質面板中顯示的名字
DefaultValue是默認值,在為改變參數情況下的值。
將shader拖入創建好的材質中
可以在材質面板看到定義好的屬性
Subshader
Unity shader的編寫中,SubShader至少要有一個,也可以有多個。作用在于高級的顯卡可以執行有的顯卡無法執行的內容。
語法:
SubShader{
????????????//可選的
????????????[Tags]
? ? ? ? ? ? //可選的
????????????[RenderSetup]
? ? ? ? ? ? Pass{
? ? ? ? ? ? }
? ? ? ? ? ? // Other Passes
}
定義了一系列Pass以及可選的狀態([RenderSetup]) 和 標簽([Tags])設置。每一個Pass都定義了一次完整的渲染流程,要盡可能的減小Pass的數量,可以降低性能消耗。
狀態和標簽也可以在Pass中聲明,但是SubShader中含有獨有的標簽設置。
在SubShader中的狀態設置,可以作用于所有的Pass。
狀態設置 [RenderSetup]
常見的狀態設置
標簽[Tags]
屬于鍵值對(Key/Value),Key和Value都是“string”類型
鍵與值中間使用“=”銜接
語法:
Tags {"TagName1"="Value1" ? ?"TagName2"="Value2"}
圖例中是SubShader獨有的,不可以在Pass中進行聲明。
Pass語義塊
語法:
Pass{
????????????[Name]
????????????[Tags]
????????????[RenderSetup]
? ? ? ? ? ? // Other Code
}
首先定義pass的名字:
例如: ?
UsePass " MyShader/MYPASSNAME "
命名需要大寫
FallPass
如果所有的SubShader都無法執行就會執行FallPass
語法:
Fallback "name"
//或者
Fallback off