zoukankan      html  css  js  c++  java
  • 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时,显示的效果

  • 相关阅读:
    hdu 4707 Pet
    hdu 3584 Cube (三维树状数组)
    poj 2155 Matrix (树状数组)
    poj 1195 Mobile phones (树状数组)
    工厂方法模式
    简单工厂模式
    关于设计模式
    UML类图
    UML
    【转载】UML用例图
  • 原文地址:https://www.cnblogs.com/MrZivChu/p/shader4.html
Copyright © 2011-2022 走看看