UGUI 图片去色,变灰度图

发表于2018-12-04
评论1 3k浏览
本篇文章给大家分享下UGUI 图片将其他颜色去除,显示灰色图片。一般项目中会有一些图标,当你拥有该图标显示为彩色图标,一般项目中最占资源的就是图片,不允许添加一张彩色图片,一张灰色图片,必须通过一些方法将彩色图标的颜色去掉,获取图标的灰色值。

UGUI 自带了一个Shader, Sprites/Default, 默认给了一个添加该Shader 的材质球。
Shader "UISprites/DefaultGray"
{
    Properties
     {
         [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
         _Color ("Tint", Color) = (1,1,1,1)
         [MaterialToggle] PixelSnap ("Pixel snap", Float) = 0
         //---Add---
         // Change the brightness of the Sprite
         _GrayScale ("GrayScale", Float) = 1
         //---Add---
     }
     SubShader
     {
         Tags
         { 
             "Queue"="Transparent" 
             "IgnoreProjector"="True" 
             "RenderType"="Transparent" 
             "PreviewType"="Plane"
             "CanUseSpriteAtlas"="True"
         }
         Cull Off
         Lighting Off
         ZWrite Off
         Blend One OneMinusSrcAlpha
         Pass
         {
         CGPROGRAM
             #pragma vertex vert
             #pragma fragment frag
             #pragma multi_compile _ PIXELSNAP_ON
             #include "UnityCG.cginc"
             struct appdata_t
             {
                 float4 vertex   : POSITION;
                 float4 color    : COLOR;
                 float2 texcoord : TEXCOORD0;
             };
            struct v2f
             {
                 float4 vertex   : SV_POSITION;
                 fixed4 color    : COLOR;
                 half2 texcoord  : TEXCOORD0;
             };
             fixed4 _Color;
             v2f vert(appdata_t IN)
             {
                 v2f OUT;
                 OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex);
                 OUT.texcoord = IN.texcoord;
                 OUT.color = IN.color * _Color;
                 #ifdef PIXELSNAP_ON
                 OUT.vertex = UnityPixelSnap (OUT.vertex);
                 #endif
                 return OUT;
             }
             sampler2D _MainTex;
             float _GrayScale;
             fixed4 frag(v2f IN) : SV_Target
             {
                 fixed4 c = tex2D(_MainTex, IN.texcoord) * IN.color;
                 //---Add--
                 float cc = (c.r * 0.299 + c.g * 0.518 + c.b * 0.184);
                 cc *= _GrayScale;
                 c.r = c.g = c.b = cc;
                 //---Add--
                 c.rgb *= c.a;
                 return c;
             }
         ENDCG
         }
     }
}

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引