Shader的結(jié)構(gòu)

命名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è)下劃線

而“display name”是在材質(zhì)面板中顯示的名字

DefaultValue是默認(rèn)值,在為改變參數(shù)情況下的值。


將shader拖入創(chuàng)建好的材質(zhì)中

可以在材質(zhì)面板看到定義好的屬性


Subshader

Unity shader的編寫中,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]

常見的狀態(tài)設(shè)置


標(biāo)簽[Tags]

屬于鍵值對(duì)(Key/Value),Key和Value都是“string”類型

鍵與值中間使用“=”銜接

語(yǔ)法:

Tags {"TagName1"="Value1" ? ?"TagName2"="Value2"}


圖例中是SubShader獨(dú)有的,不可以在Pass中進(jìn)行聲明。


Pass語(yǔ)義塊

語(yǔ)法:

Pass{

????????????[Name]

????????????[Tags]

????????????[RenderSetup]

? ? ? ? ? ? // Other Code

}

首先定義pass的名字:

例如: ?

UsePass " MyShader/MYPASSNAME "

命名需要大寫



FallPass

如果所有的SubShader都無(wú)法執(zhí)行就會(huì)執(zhí)行FallPass

語(yǔ)法:

Fallback "name"

//或者

Fallback off

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容