Shader學(xué)習(xí)第四篇:Unity下Shader屬性
Properties語義塊包含了一系列屬性(property),這些屬性將會(huì)出現(xiàn)在材質(zhì)面板中。
Properties屬性
屬性定義:
Properties{
? ?_Color("ColorInspector",Color) = (1,1,1,1)}
變量名:_Color
Inspector的面板上顯示名稱:ColorInspector
類型:Color
默認(rèn)值:(1,1,1,1)
屬性類型
有如下幾種
Color:顏色
顏色屬性是個(gè)四維分量,也就是由四個(gè)數(shù)值來組成的,每個(gè)數(shù)值代表著顏色的一個(gè)通道。四個(gè)數(shù)值依次為RGBA(紅,綠,藍(lán),透明)。
RGB的取值是0-255(2的8次方個(gè)值域),在Shader中范圍變?yōu)?-1,例如(1,1,1,1)顯示為白色。
Properties{
?_Color("Color",Color) = (1,1,1,1)//顏色}

Vector:向量
Properties{
? ?_Vector("Vector",Vector) = (3,2,3,1)}

整型Int
Properties{
? ?_Int("Int",Int) = 234//int類型}

浮點(diǎn)數(shù)Float
Properties{
? ? ?_Float("Float",Float) = 3.14}

Range范圍
Properties{
? ? _Range("Range",Range(2,8)) = 6//范圍值}

可拖動(dòng)滑動(dòng)條滑動(dòng)
2D紋理
Properties{
? ? ?_MainTex("Main Tex",2D) = "white"{}//紋理貼圖}

默認(rèn)值
2D紋理的默認(rèn)值有以下幾種:white、black、gray或者bump
如果不設(shè)置默認(rèn)值,即=“”{},則其實(shí)與=“gray”{}相同;法線貼圖設(shè)置為bump,意思是如果未使用法線貼圖,則使用物體默認(rèn)自帶的法線。
Properties{
? ? ?_MainTex("Main Tex",2D) = "bump"{}//法線貼圖}
Shader內(nèi)部會(huì)自動(dòng)調(diào)用Unity內(nèi)部準(zhǔn)備的一張小圖片,white就是純白色,black就是純黑色,gray就是灰色圖,bump就是法線圖。
Cube, 立方體紋理
Properties{
? ? _Cube("Cube",Cube) = "white"{}//天空盒}

3D, 3D貼圖
Properties{
? ? ? _3D("Texure",3D) = "black"{}//3D貼圖}

Cg/HLSL中的數(shù)據(jù)類型
講完上面的屬性,不得分享數(shù)據(jù)類型,因?yàn)橹挥猩厦娑x的屬性,我們的代碼依然無法使用上面的屬性定義,需要下面數(shù)據(jù)類型、名稱一一對(duì)應(yīng)才行
對(duì)應(yīng)的定義如下:
屬性定義
數(shù)據(jù)類型定義與上面對(duì)應(yīng)
關(guān)于float、half、fixed這里說下
float:高精度浮點(diǎn)值,通常用32位存儲(chǔ)
half:中等精度浮點(diǎn)值,通常用16位存儲(chǔ),范圍-60000~+60000
fixed:最低精度浮點(diǎn)值,通常用11位存儲(chǔ),范圍-2.0~+2.0,通常用于常規(guī)的顏色與貼圖,以及低精度間的一些運(yùn)算變量等。
在PC平臺(tái)上,Shader中寫的是half還是fixed,統(tǒng)統(tǒng)都會(huì)被當(dāng)作float來處理。half與fixed僅在一些移動(dòng)設(shè)備上有效。
比較常用的寫法是,除了位置和坐標(biāo)用float以外,其他用half。
fixed精度實(shí)際上只在一些較舊的移動(dòng)平臺(tái)上有用,在大多數(shù)現(xiàn)代的GPU上,它們內(nèi)部把fixed和half當(dāng)成同等精度來對(duì)待。
完整代碼