Shader的結構

命名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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容