原創文章如需轉載請註明:轉載自風宇沖Unity3D教程學院
Shader第十二講
Alpha測試
引言:本講和下一講主要講Alpha即透明通道有關的內容。RGBA,其中最終在螢幕上顯示的只有RGB即紅綠藍組成的顏色,Alpha並沒有任何顏色顯示。A只是輔助顏色運算特別是多圖層運算而已。例如在單圖層的情況下(1,1,1,0.8)輸出的是(1,1,1)*0.8即淺灰色(0.8,0.8,0.8),和(0.8,0.8,0.8)是等價的.但是假如不再是單圖層而背景為綠色(0,1,0,1)的時候,(0.8,0.8,0.8)就不知道怎麼去運算了,而(1,1,1,0.8)知道。看不懂這段引言?沒關係,往下看,當學完第五講和第六講後再回來看就自然能深刻理解了。
什麼是通道:通道是8位的灰階映像,能夠顯示256種灰階,用來表示顏色的RGBA值。R=Red紅色,G=Green綠色,B=blue藍色,A=alhpa透明值, 其中RGB為原色通道,A為透明通道。在通道中,以白色代替透明表示要處理的部分(選擇地區);以黑色表示不需處理的部分(非選擇地區)所有通道取值範圍是 [0,255], 但是在Shader裡取值範圍是[0,1], 0和1分辨對應0和255
什麼是Alpha通道:定義:一般圖形卡具有32位匯流排,附加的8位訊號就被用來儲存不可見的透明度訊號以方便處理用,這就是Alpha通道。白色的alpha象素用以定義不透明的彩色象素,而黑色的alpha象素用以定義透明象素,黑白之間的灰階用來定義半透明象素。簡而言之:Alpha通道取值同樣為[0,255] 以及Shader[0,1], 值越小最透明,值最大越不透明。在Shader裡即0為透明,什麼都沒有,編輯器顯示為黑色。1則不透明,全部都顯示,編輯器其顯示為白色如。
什麼是Alpha Test:Alpha Test ,中文就是透明度測試。簡而言之就是V&F shader中最後fragment函數輸出的該點顏色值(即上一講frag的輸出half4)的alpha值與固定值進行比較。 AlphaTest語句通常位於Pass{}中的起始位置。
文法:第一種: AlphaTest Off: 不測試,全渲染第二種:Alpha 比較符 目標alpha值其中目標alpha值取值範圍是 0至1, 也可以用參數 ,如 AlphaTest [varName]。
比較符:(目標alpha值下面記作x)Always 全渲染(任意x值)Never 全不渲染Greater 點的alpha值大於x時渲染GEuqal 點的alpha值大於等於x時渲染Less 點的alpha值小於x時渲染LEqual 點的alpha值小於等於x時渲染Equal 點的alpha值等於x時渲染NotEqual 點的alpha值不等於x時渲染例:AlphaTest never 0 全不渲染(這個0可以是任意值,但必須填)AlphaTest always 0 全渲染(這個0可以是任意值,但必須填)AlphaTest off 全渲染AlphaTest Greater 0.4 當alpha大於0.4渲染, 缺點是邊緣過於鋒利並且顯示不完整,alpha小於0.4的部分被忽略掉了Alpha Blend 邊緣柔和,但是中心也太柔和,沒有實體的感覺AlphaTest Greater 0.4 / AlphaTest LEqual 0.4 兩個部分,大於0.4不混合,小於0.4混合。效果是既有實體感覺,邊緣也柔和。