ImageGradient.shader 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. // Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
  2. // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
  3. Shader "FairyGUI/ImageGradient"
  4. {
  5. Properties
  6. {
  7. _MainTex("Base (RGB), Alpha (A)", 2D) = "black" {}
  8. _StencilComp("Stencil Comparison", Float) = 8
  9. _Stencil("Stencil ID", Float) = 0
  10. _StencilOp("Stencil Operation", Float) = 0
  11. _StencilWriteMask("Stencil Write Mask", Float) = 255
  12. _StencilReadMask("Stencil Read Mask", Float) = 255
  13. _ColorMask("Color Mask", Float) = 15
  14. _BlendSrcFactor("Blend SrcFactor", Float) = 5
  15. _BlendDstFactor("Blend DstFactor", Float) = 10
  16. _MinHeight("Minimum Height", Range(0, 1)) = 0.2
  17. _MaxHeight("Maximum Height", Range(0, 1)) = 0.8
  18. _AlphaTop("Top Alpha", Range(0, 1)) = 1
  19. _AlphaBottom("Bottom Alpha", Range(0, 1)) = 0
  20. }
  21. SubShader
  22. {
  23. LOD 100
  24. Tags
  25. {
  26. "Queue" = "Transparent"
  27. "IgnoreProjector" = "True"
  28. "RenderType" = "Transparent"
  29. }
  30. Stencil
  31. {
  32. Ref[_Stencil]
  33. Comp[_StencilComp]
  34. Pass[_StencilOp]
  35. ReadMask[_StencilReadMask]
  36. WriteMask[_StencilWriteMask]
  37. }
  38. Cull Off
  39. Lighting Off
  40. ZWrite Off
  41. Fog { Mode Off }
  42. Blend[_BlendSrcFactor][_BlendDstFactor], One One
  43. ColorMask[_ColorMask]
  44. Pass
  45. {
  46. CGPROGRAM
  47. #pragma multi_compile NOT_COMBINED COMBINED
  48. #pragma multi_compile NOT_GRAYED GRAYED COLOR_FILTER
  49. #pragma multi_compile NOT_CLIPPED CLIPPED SOFT_CLIPPED ALPHA_MASK
  50. #pragma vertex vert
  51. #pragma fragment frag
  52. #include "UnityCG.cginc"
  53. struct appdata_t
  54. {
  55. float4 vertex : POSITION;
  56. fixed4 color : COLOR;
  57. float4 texcoord : TEXCOORD0;
  58. };
  59. struct v2f
  60. {
  61. float4 vertex : SV_POSITION;
  62. fixed4 color : COLOR;
  63. float4 texcoord : TEXCOORD0;
  64. #ifdef CLIPPED
  65. float2 clipPos : TEXCOORD1;
  66. #endif
  67. #ifdef SOFT_CLIPPED
  68. float2 clipPos : TEXCOORD1;
  69. #endif
  70. };
  71. sampler2D _MainTex;
  72. #ifdef COMBINED
  73. sampler2D _AlphaTex;
  74. #endif
  75. CBUFFER_START(UnityPerMaterial)
  76. #ifdef CLIPPED
  77. float4 _ClipBox = float4(-2, -2, 0, 0);
  78. #endif
  79. #ifdef SOFT_CLIPPED
  80. float4 _ClipBox = float4(-2, -2, 0, 0);
  81. float4 _ClipSoftness = float4(0, 0, 0, 0);
  82. #endif
  83. CBUFFER_END
  84. #ifdef COLOR_FILTER
  85. float4x4 _ColorMatrix;
  86. float4 _ColorOffset;
  87. float _ColorOption = 0;
  88. #endif
  89. half _AlphaTop;
  90. half _AlphaBottom;
  91. half _MinHeight;
  92. half _MaxHeight;
  93. v2f vert(appdata_t v)
  94. {
  95. v2f o;
  96. o.vertex = UnityObjectToClipPos(v.vertex);
  97. o.texcoord = v.texcoord;
  98. #if !defined(UNITY_COLORSPACE_GAMMA) && (UNITY_VERSION >= 550)
  99. o.color.rgb = GammaToLinearSpace(v.color.rgb);
  100. o.color.a = v.color.a;
  101. #else
  102. o.color = v.color;
  103. #endif
  104. #ifdef CLIPPED
  105. o.clipPos = mul(unity_ObjectToWorld, v.vertex).xy * _ClipBox.zw + _ClipBox.xy;
  106. #endif
  107. #ifdef SOFT_CLIPPED
  108. o.clipPos = mul(unity_ObjectToWorld, v.vertex).xy * _ClipBox.zw + _ClipBox.xy;
  109. #endif
  110. return o;
  111. }
  112. fixed4 frag(v2f i) : SV_Target
  113. {
  114. fixed4 col = tex2D(_MainTex, i.texcoord.xy / i.texcoord.w) * i.color;
  115. #ifdef COMBINED
  116. col.a *= tex2D(_AlphaTex, i.texcoord.xy / i.texcoord.w).g;
  117. #endif
  118. #ifdef GRAYED
  119. fixed grey = dot(col.rgb, fixed3(0.299, 0.587, 0.114));
  120. col.rgb = fixed3(grey, grey, grey);
  121. #endif
  122. #ifdef SOFT_CLIPPED
  123. float2 factor = float2(0,0);
  124. if (i.clipPos.x < 0)
  125. factor.x = (1.0 - abs(i.clipPos.x)) * _ClipSoftness.x;
  126. else
  127. factor.x = (1.0 - i.clipPos.x) * _ClipSoftness.z;
  128. if (i.clipPos.y < 0)
  129. factor.y = (1.0 - abs(i.clipPos.y)) * _ClipSoftness.w;
  130. else
  131. factor.y = (1.0 - i.clipPos.y) * _ClipSoftness.y;
  132. col.a *= clamp(min(factor.x, factor.y), 0.0, 1.0);
  133. #endif
  134. #ifdef CLIPPED
  135. float2 factor = abs(i.clipPos);
  136. col.a *= step(max(factor.x, factor.y), 1);
  137. #endif
  138. #ifdef COLOR_FILTER
  139. if (_ColorOption == 0)
  140. {
  141. fixed4 col2 = col;
  142. col2.r = dot(col, _ColorMatrix[0]) + _ColorOffset.x;
  143. col2.g = dot(col, _ColorMatrix[1]) + _ColorOffset.y;
  144. col2.b = dot(col, _ColorMatrix[2]) + _ColorOffset.z;
  145. col2.a = dot(col, _ColorMatrix[3]) + _ColorOffset.w;
  146. col = col2;
  147. }
  148. else //premultiply alpha
  149. col.rgb *= col.a;
  150. #endif
  151. #ifdef ALPHA_MASK
  152. clip(col.a - 0.001);
  153. #endif
  154. float minHeight = _MinHeight;
  155. float maxHeight = _MaxHeight;
  156. float t = i.texcoord.y;
  157. float alpha = smoothstep(minHeight, maxHeight, t) * (_AlphaTop - _AlphaBottom) + _AlphaBottom;
  158. col.a *= alpha;
  159. return col;
  160. }
  161. ENDCG
  162. }
  163. }
  164. }