Shader-AlphaTest(1.0和2.0)
阿新 • • 發佈:2018-11-15
所謂Alpha測試,就是指測試畫素點的a值,只有當該畫素點的a值符合要求時,才渲染該畫素,否則不渲染該畫素.
首先來看1.0版本:
Shader "Custom/AlphaTest" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { //Greater 只有當a值大於指定值時才渲染該畫素 //GEqual 只有當a值大於或者等於指定值時才渲染該畫素 //Less 只有當a值小於指定值時才渲染該畫素 //LEqual 只有當a值小於或者等於指定值時才渲染該畫素 //Equal 只有a值等於指定值時才渲染該畫素 //NotEqual 只有a值不等於指定值時才渲染該畫素 //Always Alpha測試總是通過,渲染所有畫素 //Never Alpha測試總是不通過,不渲染任何畫素 AlphaTest Greater 0.5 //測試a值是否 大於0.5,如果大於0.5則原樣渲染,否則不渲染該畫素 Pass { SetTexture[_MainTex] { combine Texture } } } }
2.0版本中可以通過程式設計實現a測試:
Shader "Custom/AlphaTest2" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } sampler2D _MainTex; fixed4 frag (v2f i) : SV_Target { fixed4 col = tex2D(_MainTex, i.uv); if (col.a > 0.5) { return col; } else { return fixed4(0, 0, 0, 0); } } ENDCG } } }