unity3D Shader 有以下幾種
- 表面著色器(surface shader) ----對象的的表面的處理 適合絕大多數(shù)需要shader
- 片段著色器(fragment shader) ---- 可以讓你做更多的效果,但是此shader更難寫。你也可以用它做一些底層的工作,比如頂點光照(Vertex lighting,即在每個頂點存儲該點的光照信息)。頂點光照對于移動設(shè)備很有用 該shader對于一些需要多通道(multiple passes)的高級渲染效果也很有效。
-
屬性值(property)定義的形式:
Properties {
_Name(“Displayed Name”,type) = default value[{options}]
}
_name 屬性名稱
shader 內(nèi)部使用的
type 屬性值的類型
- Color - 代表純色, 使用了RGBA表示法
- 2D - 代表尺寸為2的冪次的紋理(如 2,4,8,16 ....);
- Rect - 代表紋理(texture),此處處理的不一定是2的冪次
- Cube - 用于3d中的cube map ,天空盒
- Range - 在最大或最小的值,在界面中有一個滑動條
- Float - 任意浮點型
- Vector - 4維向量值, 本質(zhì)就是4個浮點數(shù)組成的類型。(x,y,z,w)
bump (說明此紋理是一個凹凸紋理)
- { options }
這里注意了,{options} 僅僅用于紋理類型,比如上面提到的2D,Rect,Cube,對于這些類型,如果沒有options可填,至少要寫一個空的{},否則編譯出錯。可以使用空格將多個options(選項)分開 ,可用的options(選項)如下:
Tags
Tags {“RenderType” = “Opaque”}
這意味著當(dāng)程序去渲染不透明的幾何體Tags {“RenderType” = “Transparent”}
意味著我們的shader只會輸出半透明或透明的像素Tags {“IgnoreProjector”=“True”}
意味著你渲染的物體不會受到projectors(投影儀)的影響-
Tags {“Queue”=“xxxx”}
當(dāng)渲染的對象類型是透明物體時,Queue標(biāo)簽?zāi)墚a(chǎn)生一些非常有趣的效果- Background 在所有其他物體渲染之前渲染,被用于天空盒或類似的背景效果
- Geometry(默認(rèn)tags為geometry) – 適用于大多數(shù)物體。非透明物體使用這種渲染順序。
- AlphaTest – 進(jìn)行alpha測試的像素(alpha-test是指當(dāng)前像素的alpha小于一定的值就舍棄該像素)應(yīng)該使用該渲染順序。單獨設(shè)置該渲染順序是因為當(dāng)在渲染完所有實體過后,渲染alpha測試的物體將更有效率。
- Transparent – 該渲染標(biāo)簽所屬的物體將在標(biāo)簽為Geometry和AlphaTest之后的物體渲染,并且這些貼著Transparent的所有物體本身是從后往前依次渲染的。任何經(jīng)過alpha-blended的物體都應(yīng)該使用該標(biāo)簽(譯者注:alpha-blended是指使用當(dāng)前像素的alpha作為混合因子,來混合之前寫入到緩存中像素值,注意此時shader是不能寫入深度緩存的,因為關(guān)閉了寫入深度緩存的功能,如果不關(guān)閉寫入深度緩存,那么在進(jìn)行深度檢測的時候,它背后的物體本來我們是可以透過它被我們看到的,但由于深度檢測時,小于它的深度就被剔除了,從而我們就看不到它后面的物體了),玻璃和粒子效果比較適合該渲染標(biāo)簽。
- Overlay – 該渲染標(biāo)簽適合覆蓋效果,任何最后渲染的效果都可以使用該標(biāo)簽,比如透鏡光暈
- 有趣的是你可以給這些基本的渲染標(biāo)簽進(jìn)行加加減減。這些預(yù)定義的值本質(zhì)上是一組定義整數(shù),Background = 1000, Geometry = 2000, AlphaTest = 2450, Transparent = 3000,最后Overlay = 4000。
SurfaceOutput
struct SurfaceOutput {
half3 Albedo; //該像素的顏色值
half3 Normal; //該像素的法向量
half3 Emission; //該像素的輻射光,輻射光是最簡單的一種光,它直接從物體發(fā)出并且不受任何光源影響
half Specular; //該像素的鏡面高光
half Gloss; //該像素的發(fā)光強(qiáng)度
half Alpha; //該像素的透明度