• 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时,显示的效果

  • 相关阅读:
    新浪JavaScript库
    Java中创建的对象多了,必然影响内存和性能
    Fidder抓包设置
    JavaScript处理股票数据
    按钮控制示例
    JavaScript更改css样式
    AppCan模拟器调试
    AppCan调试问题
    Java虚拟机JVM学习04 类的初始化
    COM组件和调用详细教程
  • 原文地址:https://www.cnblogs.com/MrZivChu/p/shader4.html
Copyright © 2020-2023  润新知