主要用於花草樹木
用3D的Plane來實現透明的例子:
給Plane先賦予一個帶alpha通道的透明圖片,但是此圖片此時是看不出來是透明的,如下:
現在我們要做的就是顯示透明的效果:現在就用到了alphatest了,
表面着色器實現代碼:
Shader "Custom/Plane" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} _alphaValue("alphavalue",range(0,1))=0.3 } SubShader { Tags { "Queue"="Transparent" "RenderType"="Transparent" } LOD 200 alphatest greater [_alphaValue] CGPROGRAM #pragma surface surf Lambert sampler2D _MainTex; struct Input { float2 uv_MainTex; }; void surf (Input IN, inout SurfaceOutput o) { half4 c = tex2D (_MainTex, IN.uv_MainTex); o.Albedo = c.rgb; o.Alpha = c.a; } ENDCG } FallBack "Diffuse" }
頂點片段着色器實現代碼:
Shader "Custom/testalphatest" { Properties { _Color("Base COlor",Color)=(1,1,1,1) _MainTex ("Base (RGB)", 2D) = "white" {} _alphaValue("alphavalue",range(0,1))=0.5 } SubShader { Tags { "queue"="transparent" "RenderType"="Transparent" } LOD 200 Pass { alphatest greater [_alphaValue] Name "simple" Cull off CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" float4 _Color; sampler2D _MainTex; struct v2f { float4 pos:POSITION; float4 uv:TEXCOORD0; }; v2f vert(appdata_base v) { v2f o; o.pos=mul(UNITY_MATRIX_MVP,v.vertex); o.uv=v.texcoord; return o; } half4 frag(v2f i):color { float2 uv=i.uv.xy; half4 c=tex2D(_MainTex,uv)*_Color; return c; } ENDCG } } }
還有一個步驟就是:在Unity的PC平台下的Play settings下,把Use Direct3D 11*給關閉了就可以了!有可能是dx11不支持alphatest的緣故吧!
最終效果:
對象為cube時的效果:
調整為less時,顯示的效果