4、shader透明測試(AlphaTest)


主要用於花草樹木

用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時,顯示的效果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM