命名shader
語(yǔ)法:
Shader ?" where/name "{ ?}
"/"的左邊決定"name"這個(gè)shader會(huì)放在哪個(gè)(where)面板下
如果是shader"Custom/MyShader"{ ?}
位置為:Shader ? —> ?Custom ?—> ?MyShader
屬性(承接材質(zhì)和shader)properties
語(yǔ)法:
properties{
? ? ? ? ? ? Name("display ?name",PropertyType) = ? ?DefaultValue
? ? ? ? ? ? Name("display ?name",PropertyType) = ? ?DefaultValue
? ? ? ? ? ? //更多屬性
}
shader中的屬性名字“Name”需要在前面添加一個(gè)下劃線(xiàn)
而“display name”是在材質(zhì)面板中顯示的名字
DefaultValue是默認(rèn)值货岭,在為改變參數(shù)情況下的值疾渴。
將shader拖入創(chuàng)建好的材質(zhì)中
可以在材質(zhì)面板看到定義好的屬性
Subshader
Unity shader的編寫(xiě)中搞坝,SubShader至少要有一個(gè),也可以有多個(gè)敦第。作用在于高級(jí)的顯卡可以執(zhí)行有的顯卡無(wú)法執(zhí)行的內(nèi)容店量。
語(yǔ)法:
SubShader{
????????????//可選的
????????????[Tags]
? ? ? ? ? ? //可選的
????????????[RenderSetup]
? ? ? ? ? ? Pass{
? ? ? ? ? ? }
? ? ? ? ? ? // Other Passes
}
定義了一系列Pass以及可選的狀態(tài)([RenderSetup]) 和 標(biāo)簽([Tags])設(shè)置融师。每一個(gè)Pass都定義了一次完整的渲染流程,要盡可能的減小Pass的數(shù)量霹粥,可以降低性能消耗疼鸟。
狀態(tài)和標(biāo)簽也可以在Pass中聲明,但是SubShader中含有獨(dú)有的標(biāo)簽設(shè)置浩淘。
在SubShader中的狀態(tài)設(shè)置,可以作用于所有的Pass砂蔽。
狀態(tài)設(shè)置 [RenderSetup]
常見(jiàn)的狀態(tài)設(shè)置
標(biāo)簽[Tags]
屬于鍵值對(duì)(Key/Value)左驾,Key和Value都是“string”類(lèi)型
鍵與值中間使用“=”銜接
語(yǔ)法:
Tags {"TagName1"="Value1" ? ?"TagName2"="Value2"}
圖例中是SubShader獨(dú)有的极谊,不可以在Pass中進(jìn)行聲明轻猖。
Pass語(yǔ)義塊
語(yǔ)法:
Pass{
????????????[Name]
????????????[Tags]
????????????[RenderSetup]
? ? ? ? ? ? // Other Code
}
首先定義pass的名字:
例如: ?
UsePass " MyShader/MYPASSNAME "
命名需要大寫(xiě)
FallPass
如果所有的SubShader都無(wú)法執(zhí)行就會(huì)執(zhí)行FallPass
語(yǔ)法:
Fallback "name"
//或者
Fallback off