Unity之Shader Alpha 测试 和 8中比较条件 - 七

来源:互联网 发布:域名备案注销 编辑:程序博客网 时间:2024/05/21 04:20

Alpha 测试 和 8中比较条件

通道道是8位的灰度图像,能够显示1-256种灰度,用来表示颜色的RGBA值。R红色,G绿色,B蓝色,A透明值, 其中RGB为原色通道,A为透明通道。在通道中,以白色代替透明表示要处理的部分,以黑色表示不需处理的部分。所有通道取值范围是 [0,255], 但是在Shader里取值范围是[0,1], 0和1分辨对应0和255Alpha 检测用于在 fragment 函数完成最终的计算之后,在即将写入到帧中之前,通过和一个固定的数值比较,来决定当前fragment函数的计算结果到底要不要写入到帧中,从而输出到屏幕上。Alpha检测的具体比较数值可以在运行时确定,而AlphaTest的比较条件有 Greater  点的Alpha值大于 X时渲染,          GEuqal   点的Alpha值大于等于 X时渲染,Equal    点的Alpha值等于 X时渲染,NotEqual 点的Alpha值不等于X时渲染,Less     点的Alpha值小于 X时渲染,LEqual   点的Alpha值小于等于 X时渲染,Always   全渲染,Never    全部渲染这8中情况

使用方法如下
AlphaTest Less 0.5
AlphaTest Greater 0.3

注:使用AlphaTest需要贴图带有 Alpha通道
在代码中的实际运用如下

Shader "Custom/PassFour" {    Properties {        //定义一个贴图        _MainTex ("Base (RGB)", 2D) = "white" {}     }    SubShader     {               Tags {"RenderType" = "Opaque" "IGNOREPROJECTOR" = "TRUE" "QUEUE" = "Transparent"}        LOD 200        Pass        {            //AlphaTest Greater 0.6            //AlphaTest Less 0.5            AlphaTest Greater 0.4            AlphaTest Less 0.9            // 通过绑定固定通道来使用定点色            BindChannels            {                Bind "Vertex", vertex     // 绑定定点                Bind "Normal", normal                     Bind "Color", color                Bind "Texcoord", texcoord0                Bind "Texcoord", texcoord1            }            //给材质设置 贴图             SetTexture [_MainTex]             {                Combine texture * primary double            }        }    }     FallBack "Diffuse"}

效果如下
选择材质
这里写图片描述
选择贴图信息如下
这里写图片描述

效果一
这里写图片描述
效果二
这里写图片描述
效果三
这里写图片描述

根据实际情况选择适当的组合
所选贴图要有 RGBA 即需要带有 Alpha通道

0 0
原创粉丝点击