1. 程式人生 > >12.計算機圖形學之 Alpha 測試

12.計算機圖形學之 Alpha 測試

Alpha測試:
符合條件的 alpha 畫素顯示出來,不符合的丟棄掉。

Shader 1.0

AlphaTest  	Always  0.5

Always: 表示關閉測試。總是通過。
Never: 總是不通過。 不會渲染出來 。
變換引數:

_AlphaCut ("Alpha  cut ", float) = 0.5
AlphaTest    Greater [_AlphaCut]
大於 (Greater) 僅渲染 alpha 值大於 AlphaValue 的畫素。
大於等於 (GEqual) 僅渲染 alpha 值大於或等於 AlphaValue 的畫素。
小於 (Less) 僅渲染 alpha 值小於 AlphaValue 的畫素。
小於等於 (LEqual) 僅渲染 alpha 值小於或等於 AlphaValue 的畫素。
等於 (Equal) 僅渲染 alpha 值等於 AlphaValue 的畫素。
不等於 (NotEqual) 僅渲染 alpha 值不等於 AlphaValue 的畫素。
總是 (Always) 這在功能上相當於 Alpha 測試關 (AlphaTest Off)。
永不 (Never) 不渲染任何畫素。

Shader 2.0 :

Shader "Hidden/AlphaTest"
{
	Properties
	{
		_MainTex (
"Texture", 2D) = "white" {} } SubShader { // No culling or depth //Cull Off ZWrite Off ZTest Always Blend SrcAlpha OneMinusSrcAlpha // Traditional transparency 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); // just invert the colors //col.rgb = 1 - col.rgb; if(col.a>0.5) { return fixed4(0,0,0,0); } else { return col; } return col; } ENDCG } } }