[Shader] UnityShader系列---灰白效果

原创 2015年11月18日 18:07:57

支持 NGUI的 UIPanel 的SoftClip,支持主流机型(小米,锤子,三星,iPhone等手机)

无图无真相

这里写图片描述

修改

Unlit - Transparent Colored.shader

如下:

Shader "Unlit/Transparent Colored"
{
    Properties
    {
        _MainTex ("Base (RGB), Alpha (A)", 2D) = "black" {}
    }

    SubShader
    {
        LOD 200

        Tags
        {
            "Queue" = "Transparent"
            "IgnoreProjector" = "True"
            "RenderType" = "Transparent"
        }

        Pass
        {
            Cull Off
            Lighting Off
            ZWrite Off
            Fog { Mode Off }
            Offset -1, -1
            Blend SrcAlpha OneMinusSrcAlpha

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag           
            #include "UnityCG.cginc"

            sampler2D _MainTex;
            float4 _MainTex_ST;

            struct appdata_t
            {
                float4 vertex : POSITION;
                float2 texcoord : TEXCOORD0;
                fixed4 color : COLOR;
            };

            struct v2f
            {
                float4 vertex : SV_POSITION;
                half2 texcoord : TEXCOORD0;
                fixed4 color : COLOR;

                fixed gray : TEXCOORD1;   

            };

            v2f o;

            v2f vert (appdata_t v)
            {
                o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
                o.texcoord = v.texcoord;
                o.color = v.color;

                o.gray = dot(v.color, fixed4(1,1,1,0));  

                return o;
            }

//          fixed4 frag (v2f IN) : COLOR
//          {
//              return tex2D(_MainTex, IN.texcoord) * IN.color;
//          }
            fixed4 frag (v2f i) : COLOR  
            {  
                fixed4 col;  
                col = tex2D(_MainTex, i.texcoord);  

                //if (i.gray < float(0.00000000001))
                //if (i.gray == 0)&&i.color.g <0.001&&i.color.b <0.001
                if(i.color.r <0.001&&i.color.g <0.001&&i.color.b <0.001)
                {  
                    float grey = dot(col.rgb, float3(0.299, 0.587, 0.114)); 
                    col.rgb = float3(grey, grey, grey);  
                }  
                else  
                {  
                  col = col * i.color;  
                }  
                return col;  
            }  
            ENDCG
        }
    }

    SubShader
    {
        LOD 100

        Tags
        {
            "Queue" = "Transparent"
            "IgnoreProjector" = "True"
            "RenderType" = "Transparent"
        }

        Pass
        {
            Cull Off
            Lighting Off
            ZWrite Off
            Fog { Mode Off }
            Offset -1, -1
            ColorMask RGB
            AlphaTest Greater .01  
            Blend SrcAlpha OneMinusSrcAlpha
            ColorMaterial AmbientAndDiffuse

            SetTexture [_MainTex]
            {
                Combine Texture * Primary
            }
        }
    }
}


修改

Unlit - Transparent Colored 1.shader

如下:

Shader "Hidden/Unlit/Transparent Colored 1"
{
    Properties
    {
        _MainTex ("Base (RGB), Alpha (A)", 2D) = "black" {}
    }

    SubShader
    {
        LOD 200

        Tags
        {
            "Queue" = "Transparent"
            "IgnoreProjector" = "True"
            "RenderType" = "Transparent"
        }

        Pass
        {
            Cull Off
            Lighting Off
            ZWrite Off
            Offset -1, -1
            Fog { Mode Off }
            ColorMask RGB
            AlphaTest Greater .01
            Blend SrcAlpha OneMinusSrcAlpha

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            sampler2D _MainTex;
            float4 _ClipRange0 = float4(0.0, 0.0, 1.0, 1.0);
            float2 _ClipArgs0 = float2(1000.0, 1000.0);

            struct appdata_t
            {
                float4 vertex : POSITION;
                half4 color : COLOR;
                float2 texcoord : TEXCOORD0;
            };

            struct v2f
            {
                float4 vertex : POSITION;
                half4 color : COLOR;
                float2 texcoord : TEXCOORD0;
                float2 worldPos : TEXCOORD1;
            };

            v2f o;

            v2f vert (appdata_t v)
            {
                o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
                o.color = v.color;
                o.texcoord = v.texcoord;
                o.worldPos = v.vertex.xy * _ClipRange0.zw + _ClipRange0.xy;
                return o;
            }

//          half4 frag (v2f IN) : COLOR
//          {
//              // Softness factor
//              float2 factor = (float2(1.0, 1.0) - abs(IN.worldPos)) * _ClipArgs0;
//          
//              // Sample the texture
//              half4 col = tex2D(_MainTex, IN.texcoord) * IN.color;
//              col.a *= clamp( min(factor.x, factor.y), 0.0, 1.0);
//              return col;
//          }
            half4 frag (v2f IN) : COLOR  
            {  
                // Softness factor  
                float2 factor = (float2(1.0, 1.0) - abs(IN.worldPos)) * _ClipArgs0;  

                // Sample the texture  
                half4 col = tex2D(_MainTex, IN.texcoord);  

                //if (dot(IN.color, fixed4(1, 1, 1, 0)) ==0)
                //if (dot(IN.color, fixed4(1,1,1,0)) < float(0.00000000001))
                if (IN.color.r <0.001&&IN.color.g <0.001&&IN.color.b <0.001)
                {  
                  col = tex2D(_MainTex, IN.texcoord);  
                  float grey = dot(col.rgb, fixed3(0.222, 0.707, 0.071));
                  col.rgb = float3(grey, grey, grey);
                }else{  
                  col = col * IN.color;  
                }  

                col.a *= clamp( min(factor.x, factor.y), 0.0, 1.0);  
                return col;  
            }  
            ENDCG
        }
    }

    SubShader
    {
        LOD 100

        Tags
        {
            "Queue" = "Transparent"
            "IgnoreProjector" = "True"
            "RenderType" = "Transparent"
        }

        Pass
        {
            Cull Off
            Lighting Off
            ZWrite Off
            Fog { Mode Off }
            ColorMask RGB
            AlphaTest Greater .01  
            Blend SrcAlpha OneMinusSrcAlpha
            ColorMaterial AmbientAndDiffuse

            SetTexture [_MainTex]
            {
                Combine Texture * Primary
            }
        }
    }
}


修改

Unlit - Transparent Colored 2.shader

如下:

Shader "Hidden/Unlit/Transparent Colored 2"
{
    Properties
    {
        _MainTex ("Base (RGB), Alpha (A)", 2D) = "black" {}
    }

    SubShader
    {
        LOD 200

        Tags
        {
            "Queue" = "Transparent"
            "IgnoreProjector" = "True"
            "RenderType" = "Transparent"
        }

        Pass
        {
            Cull Off
            Lighting Off
            ZWrite Off
            Offset -1, -1
            Fog { Mode Off }
            ColorMask RGB
            AlphaTest Greater .01  
            Blend SrcAlpha OneMinusSrcAlpha

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            sampler2D _MainTex;
            float4 _ClipRange0 = float4(0.0, 0.0, 1.0, 1.0);
            float4 _ClipArgs0 = float4(1000.0, 1000.0, 0.0, 1.0);
            float4 _ClipRange1 = float4(0.0, 0.0, 1.0, 1.0);
            float4 _ClipArgs1 = float4(1000.0, 1000.0, 0.0, 1.0);

            struct appdata_t
            {
                float4 vertex : POSITION;
                half4 color : COLOR;
                float2 texcoord : TEXCOORD0;
            };

            struct v2f
            {
                float4 vertex : POSITION;
                half4 color : COLOR;
                float2 texcoord : TEXCOORD0;
                float4 worldPos : TEXCOORD1;
            };

            float2 Rotate (float2 v, float2 rot)
            {
                float2 ret;
                ret.x = v.x * rot.y - v.y * rot.x;
                ret.y = v.x * rot.x + v.y * rot.y;
                return ret;
            }

            v2f o;

            v2f vert (appdata_t v)
            {
                o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
                o.color = v.color;
                o.texcoord = v.texcoord;
                o.worldPos.xy = v.vertex.xy * _ClipRange0.zw + _ClipRange0.xy;
                o.worldPos.zw = Rotate(v.vertex.xy, _ClipArgs1.zw) * _ClipRange1.zw + _ClipRange1.xy;
                return o;
            }

//          half4 frag (v2f IN) : COLOR
//          {
//              // First clip region
//              float2 factor = (float2(1.0, 1.0) - abs(IN.worldPos.xy)) * _ClipArgs0.xy;
//              float f = min(factor.x, factor.y);
//
//              // Second clip region
//              factor = (float2(1.0, 1.0) - abs(IN.worldPos.zw)) * _ClipArgs1.xy;
//              f = min(f, min(factor.x, factor.y));
//
//              // Sample the texture
//              half4 col = tex2D(_MainTex, IN.texcoord) * IN.color;
//              
//              col.a *= clamp(f, 0.0, 1.0);
//              return col;
//          }

            half4 frag (v2f IN) : COLOR  
            {  
                // First clip region  
                float2 factor = (float2(1.0, 1.0) - abs(IN.worldPos.xy)) * _ClipArgs0.xy;  
                float f = min(factor.x, factor.y);  

                // Second clip region  
                factor = (float2(1.0, 1.0) - abs(IN.worldPos.zw)) * _ClipArgs1.xy;  
                f = min(f, min(factor.x, factor.y));  

                half4 col;  
                col = tex2D(_MainTex, IN.texcoord); 
                //if (dot(IN.color, fixed4(1, 1, 1, 0)) < float(0.00000000001))
                //if (dot(IN.color, fixed4(1,1,1,0)) ==0)  
                if (IN.color.r <0.001&&IN.color.g <0.001&&IN.color.b <0.001)
                {
                  float grey = dot(col.rgb, fixed3(0.222, 0.707, 0.071));
                  col.rgb = float3(grey, grey, grey);
                }else{  
                  col = col * IN.color;  
                }  

                col.a *= clamp(f, 0.0, 1.0);  

                return col;  
            }  
            ENDCG
        }
    }

    SubShader
    {
        LOD 100

        Tags
        {
            "Queue" = "Transparent"
            "IgnoreProjector" = "True"
            "RenderType" = "Transparent"
        }

        Pass
        {
            Cull Off
            Lighting Off
            ZWrite Off
            Fog { Mode Off }
            ColorMask RGB
            AlphaTest Greater .01  
            Blend SrcAlpha OneMinusSrcAlpha
            ColorMaterial AmbientAndDiffuse

            SetTexture [_MainTex]
            {
                Combine Texture * Primary
            }
        }
    }
}


修改

Unlit - Transparent Colored 3.shader

如下:

 Shader "Hidden/Unlit/Transparent Colored 3"
{
    Properties
    {
        _MainTex ("Base (RGB), Alpha (A)", 2D) = "black" {}
    }

    SubShader
    {
        LOD 200

        Tags
        {
            "Queue" = "Transparent"
            "IgnoreProjector" = "True"
            "RenderType" = "Transparent"
        }

        Pass
        {
            Cull Off
            Lighting Off
            ZWrite Off
            Offset -1, -1
            Fog { Mode Off }
            ColorMask RGB
            AlphaTest Greater .01  
            Blend SrcAlpha OneMinusSrcAlpha

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            sampler2D _MainTex;
            float4 _ClipRange0 = float4(0.0, 0.0, 1.0, 1.0);
            float4 _ClipArgs0 = float4(1000.0, 1000.0, 0.0, 1.0);
            float4 _ClipRange1 = float4(0.0, 0.0, 1.0, 1.0);
            float4 _ClipArgs1 = float4(1000.0, 1000.0, 0.0, 1.0);
            float4 _ClipRange2 = float4(0.0, 0.0, 1.0, 1.0);
            float4 _ClipArgs2 = float4(1000.0, 1000.0, 0.0, 1.0);

            struct appdata_t
            {
                float4 vertex : POSITION;
                half4 color : COLOR;
                float2 texcoord : TEXCOORD0;
            };

            struct v2f
            {
                float4 vertex : POSITION;
                half4 color : COLOR;
                float2 texcoord : TEXCOORD0;
                float4 worldPos : TEXCOORD1;
                float2 worldPos2 : TEXCOORD2;
            };

            float2 Rotate (float2 v, float2 rot)
            {
                float2 ret;
                ret.x = v.x * rot.y - v.y * rot.x;
                ret.y = v.x * rot.x + v.y * rot.y;
                return ret;
            }

            v2f o;

            v2f vert (appdata_t v)
            {
                o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
                o.color = v.color;
                o.texcoord = v.texcoord;
                o.worldPos.xy = v.vertex.xy * _ClipRange0.zw + _ClipRange0.xy;
                o.worldPos.zw = Rotate(v.vertex.xy, _ClipArgs1.zw) * _ClipRange1.zw + _ClipRange1.xy;
                o.worldPos2 = Rotate(v.vertex.xy, _ClipArgs2.zw) * _ClipRange2.zw + _ClipRange2.xy;
                return o;
            }

//          half4 frag (v2f IN) : COLOR
//          {
//              // First clip region
//              float2 factor = (float2(1.0, 1.0) - abs(IN.worldPos.xy)) * _ClipArgs0.xy;
//              float f = min(factor.x, factor.y);
//
//              // Second clip region
//              factor = (float2(1.0, 1.0) - abs(IN.worldPos.zw)) * _ClipArgs1.xy;
//              f = min(f, min(factor.x, factor.y));
//
//              // Third clip region
//              factor = (float2(1.0, 1.0) - abs(IN.worldPos2)) * _ClipArgs2.xy;
//              f = min(f, min(factor.x, factor.y));
//
//              // Sample the texture
//              half4 col = tex2D(_MainTex, IN.texcoord)* IN.color;
//              col.a *= clamp(f, 0.0, 1.0);
//              return col;
//          }

            half4 frag (v2f IN) : COLOR  
            {  
                // First clip region  
                float2 factor = (float2(1.0, 1.0) - abs(IN.worldPos.xy)) * _ClipArgs0.xy;  
                float f = min(factor.x, factor.y);  

                // Second clip region  
                factor = (float2(1.0, 1.0) - abs(IN.worldPos.zw)) * _ClipArgs1.xy;  
                f = min(f, min(factor.x, factor.y));  

                // Third clip region  
                factor = (float2(1.0, 1.0) - abs(IN.worldPos2)) * _ClipArgs2.xy;  
                f = min(f, min(factor.x, factor.y));  

                // Sample the texture  
                half4 col = tex2D(_MainTex, IN.texcoord);
                //if (dot(IN.color, fixed4(1, 1, 1, 0)) < float(0.00000000001))
                //if (dot(IN.color, fixed4(1,1,1,0)) ==0)  
                if (IN.color.r <0.001&&IN.color.g <0.001&&IN.color.b <0.001)
                {
                  float grey = dot(col.rgb, fixed3(0.222, 0.707, 0.071));
                  col.rgb = float3(grey, grey, grey);
                }else{  
                  col = col * IN.color;  
                }  

                col.a *= clamp(f, 0.0, 1.0);  
                return col;  
            }  
            ENDCG
        }
    }

    SubShader
    {
        LOD 100

        Tags
        {
            "Queue" = "Transparent"
            "IgnoreProjector" = "True"
            "RenderType" = "Transparent"
        }

        Pass
        {
            Cull Off
            Lighting Off
            ZWrite Off
            Fog { Mode Off }
            ColorMask RGB
            AlphaTest Greater .01  
            Blend SrcAlpha OneMinusSrcAlpha
            ColorMaterial AmbientAndDiffuse

            SetTexture [_MainTex]
            {
                Combine Texture * Primary
            }
        }
    }
}

显示黑白效果:

UITexture texture;
texture.color = Color.black;

去除黑白效果:

UITexture texture;
texture.color = Color.white;

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

[Shader] UnityShader系列---灰白效果

支持 NGUI的 UIPanel 的SoftClip无图无真相修改 Unlit - Transparent Colored.shader 如下:Shader "Unlit/Transparent ...

Unity Shader 闪光特效

Unity Shader源代码如下: Shader "Custom/Flash" { Properties { _MainTex ("Texture", 2D) = "white" {} _Speed...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

UnityShader之毛绒绒效果

今天要做一个毛球的效果 核心的算法通过多个pass,从里到外一层一层的糊上一层透明diffuse,越靠外面的地方层次越少看起来越稀疏,越模糊 FurHelper.cginc struct v2f...

UnityShader——初探Compute Shader

Compute Shader是基于DX11(SM4.5+)的在GPU上运行的程序,通过Compute Shader我们可以将大量可以并行的计算放到GPU中计算从而节省CPU资源,Unity 5.6版本...
  • NotMz
  • NotMz
  • 2017-07-20 16:43
  • 61

使用shader效果

1.使用shader实现地球旋转的效果 Shader "CustomPractice/Earth"{ Properties{ //地球纹理 _EarthTex("EarthTex",2D)...

Shader投影效果

原文地址:http://www.redblack.cn/?p=147 在虚拟现实中有时候会用到投影效果,比如将灯光投射到墙壁,人物倒影,火焰投影效果等等,如下: 在wifi上有一篇...

shader 流光效果

Shader "Custom/FlashUV" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} _Layer1Tex("Lay...

[shader]玻璃效果

移动端的玻璃shader

使用CSS画个大白(●—●)

这一次我们将使用CSS来画个超能陆战队里面大白的头像。我们的做法是在一个元素上,使用CSS动态改变背景图的位置,并且加上一些线性效果。See the Pen Baymax face - Hero Nu...
  • JOUeu
  • JOUeu
  • 2015-05-30 01:05
  • 2688

UnityShader入门精要学习笔记(十):透明效果-上部分

1.Unity渲染顺序2.透明度测试片元着色器中的剪裁函数clip函数:void clip(float x) 、void clip(float2 x)、void clip(float3 x)、void...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)