Unity-ShaderLab:舊版 Alpha 測試
Alpha 測試是拒絕將像素寫入屏幕的最后機會。
注意:使用片元程序時,AlphaTest 命令無效;在大多數(shù)平臺上,使用 HLSL clip() 函數(shù)在著色器中完成 Alpha 測試。建議現(xiàn)在使用可編程著色器,而不是 SetTexture 命令。
在計算出最終輸出顏色之后,顏色可選擇性地將其 Alpha 值與固定值進(jìn)行比較。如果測試失敗,則不會將像素寫入顯示屏。
語法
渲染所有像素(默認(rèn)值),或者…
設(shè)置 Alpha 測試以僅渲染 Alpha 值在特定范圍內(nèi)的像素。
Comparison
Comparison 是以下詞語之一:

AlphaValue
一個介于 0 到 1 之間的浮點數(shù)。這也可以是 float 或 range 屬性的變量引用,在這種情況下,應(yīng)使用標(biāo)準(zhǔn)方括號表示法 ([VariableName]) 來編寫。
詳細(xì)信息
在渲染具有透明部分的凹面對象時,Alpha 測試很重要。顯卡將保留寫入屏幕的每個像素的深度記錄。如果新像素比已經(jīng)渲染的像素更遠(yuǎn),則新像素不會寫入顯示屏。這意味著即使是使用混合,對象也不會穿透顯示。

在此圖中,左側(cè)的樹是使用?AlphaTest?渲染的。請注意其中的像素是完全透明還是不透明。中間的樹是僅使用?Alpha 混合渲染的;注意由于深度緩沖區(qū)的原因,附近樹枝的透明部分如何覆蓋遠(yuǎn)處的樹葉。右側(cè)的樹是使用最后一個示例著色器渲染的;它實現(xiàn)了混合和 Alpha 測試的組合,可隱藏所有瑕疵。
示例
以下是最簡單的示例,為其指定帶有 Alpha 通道的紋理。僅當(dāng) Alpha 大于 0.5 時,該對象才可見
只有光禿禿一棵樹并不好看。讓我們添加一些光照并使剔除值可調(diào)整:
渲染植物和樹木時,許多游戲都具有 Alpha 測試常見的硬邊。解決這個問題的方法是將對象渲染兩次。在第一個通道中,我們使用 Alpha 測試僅渲染不透明度超過 50% 的像素。在第二個通道中,我們將圖形在被剪切的部分中進(jìn)行 Alpha 混合,但不記錄像素的深度。隨著更遠(yuǎn)的樹枝覆蓋附近的樹枝,我們可能會有點混淆,但在實踐中,很難遇到這種情況,因為樹葉中有很多視覺細(xì)節(jié)。
請注意,我們在 SubShader 中進(jìn)行設(shè)置,而不是在個別通道中。SubShader 中設(shè)置的任何狀態(tài)都將作為默認(rèn)值繼承到著色器內(nèi)的通道中。