|
@@ -0,0 +1,125 @@
|
|
|
+Shader "MyShader/UIImageGray"
|
|
|
+{
|
|
|
+ //修改Unity官方内置shader,UI-Default
|
|
|
+ Properties
|
|
|
+ {
|
|
|
+ // [PerRendererData]
|
|
|
+ _MainTex ("Sprite Texture", 2D) = "white" {}
|
|
|
+ _Color ("Tint", Color) = (1,1,1,1)
|
|
|
+
|
|
|
+ _StencilComp ("Stencil Comparison", Float) = 8
|
|
|
+ _Stencil ("Stencil ID", Float) = 0
|
|
|
+ _StencilOp ("Stencil Operation", Float) = 0
|
|
|
+ _StencilWriteMask ("Stencil Write Mask", Float) = 255
|
|
|
+ _StencilReadMask ("Stencil Read Mask", Float) = 255
|
|
|
+
|
|
|
+ _ColorMask ("Color Mask", Float) = 15
|
|
|
+ _ClipRect ("Clip Rect", Vector) = (-32767, -32767, 32767, 32767)
|
|
|
+ [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0
|
|
|
+ _GreyValue("_GreyValue",range(0,1))=0
|
|
|
+ }
|
|
|
+
|
|
|
+ SubShader
|
|
|
+ {
|
|
|
+ Tags
|
|
|
+ {
|
|
|
+ "Queue"="Transparent"
|
|
|
+ "IgnoreProjector"="True"
|
|
|
+ "RenderType"="Transparent"
|
|
|
+ "PreviewType"="Plane"
|
|
|
+ "CanUseSpriteAtlas"="True"
|
|
|
+ }
|
|
|
+
|
|
|
+ Stencil
|
|
|
+ {
|
|
|
+ Ref [_Stencil]
|
|
|
+ Comp [_StencilComp]
|
|
|
+ Pass [_StencilOp]
|
|
|
+ ReadMask [_StencilReadMask]
|
|
|
+ WriteMask [_StencilWriteMask]
|
|
|
+ }
|
|
|
+
|
|
|
+ Cull Off
|
|
|
+ Lighting Off
|
|
|
+ ZWrite Off
|
|
|
+ ZTest [unity_GUIZTestMode]
|
|
|
+ Blend SrcAlpha OneMinusSrcAlpha
|
|
|
+ ColorMask [_ColorMask]
|
|
|
+
|
|
|
+ Pass
|
|
|
+ {
|
|
|
+ Name "Default"
|
|
|
+ CGPROGRAM
|
|
|
+ #pragma vertex vert
|
|
|
+ #pragma fragment frag
|
|
|
+ #pragma target 2.0
|
|
|
+
|
|
|
+ #include "UnityCG.cginc"
|
|
|
+ #include "UnityUI.cginc"
|
|
|
+
|
|
|
+ #pragma multi_compile __ UNITY_UI_CLIP_RECT
|
|
|
+ #pragma multi_compile __ UNITY_UI_ALPHACLIP
|
|
|
+
|
|
|
+ struct appdata_t
|
|
|
+ {
|
|
|
+ float4 vertex : POSITION;
|
|
|
+ float4 color : COLOR;
|
|
|
+ float2 texcoord : TEXCOORD0;
|
|
|
+ UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
|
+ };
|
|
|
+
|
|
|
+ struct v2f
|
|
|
+ {
|
|
|
+ float4 vertex : SV_POSITION;
|
|
|
+ fixed4 color : COLOR;
|
|
|
+ float2 texcoord : TEXCOORD0;
|
|
|
+ float4 worldPosition : TEXCOORD1;
|
|
|
+ UNITY_VERTEX_OUTPUT_STEREO
|
|
|
+ };
|
|
|
+
|
|
|
+ sampler2D _MainTex;
|
|
|
+ fixed4 _Color;
|
|
|
+ fixed4 _TextureSampleAdd;
|
|
|
+ float4 _ClipRect;
|
|
|
+ float4 _MainTex_ST;
|
|
|
+ float _GreyValue;
|
|
|
+
|
|
|
+ v2f vert(appdata_t v)
|
|
|
+ {
|
|
|
+ v2f OUT;
|
|
|
+ UNITY_SETUP_INSTANCE_ID(v);
|
|
|
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);
|
|
|
+ OUT.worldPosition = v.vertex;
|
|
|
+ OUT.vertex = UnityObjectToClipPos(v.vertex);
|
|
|
+
|
|
|
+ OUT.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
|
|
|
+
|
|
|
+ OUT.color = v.color * _Color;
|
|
|
+ return OUT;
|
|
|
+ }
|
|
|
+
|
|
|
+ fixed4 frag(v2f IN) : SV_Target
|
|
|
+ {
|
|
|
+ half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color;
|
|
|
+
|
|
|
+ #ifdef UNITY_UI_CLIP_RECT
|
|
|
+
|
|
|
+ #endif
|
|
|
+
|
|
|
+ #ifdef UNITY_UI_ALPHACLIP
|
|
|
+ clip (color.a - 0.001);
|
|
|
+ #endif
|
|
|
+
|
|
|
+ half gray = dot(color.rgb, fixed3(0.299, 0.587, 0.114)); //0.222, 0.707, 0.071
|
|
|
+ float3 graycolor = fixed3(gray, gray, gray);
|
|
|
+ color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect);
|
|
|
+ color.rgb = graycolor* color.a ;
|
|
|
+
|
|
|
+ //color.rgb=lerp(color.rgb,graycolor,_GreyValue);
|
|
|
+
|
|
|
+ return color;
|
|
|
+ }
|
|
|
+ ENDCG
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|