UIBlur.shader 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. Shader "Custom/UIBlur"
  2. {
  3. Properties
  4. {
  5. [Toggle(IS_BLUR_ALPHA_MASKED)] _IsAlphaMasked("Image Alpha Masks Blur", Float) = 1
  6. [Toggle(IS_SPRITE_VISIBLE)] _IsSpriteVisible("Show Image", Float) = 1
  7. // Internally enforced by MAX_RADIUS
  8. _Radius("Blur Radius", Range(0, 64)) = 1
  9. _OverlayColor("Blurred Overlay/Opacity", Color) = (0.5, 0.5, 0.5, 1)
  10. // see Stencil in UI/Default
  11. [HideInInspector][PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
  12. [HideInInspector]_StencilComp ("Stencil Comparison", Float) = 8
  13. [HideInInspector]_Stencil ("Stencil ID", Float) = 0
  14. [HideInInspector]_StencilOp ("Stencil Operation", Float) = 0
  15. [HideInInspector]_StencilWriteMask ("Stencil Write Mask", Float) = 255
  16. [HideInInspector]_StencilReadMask ("Stencil Read Mask", Float) = 255
  17. [HideInInspector]_ColorMask ("Color Mask", Float) = 15
  18. [HideInInspector]_UseUIAlphaClip ("Use Alpha Clip", Float) = 0
  19. }
  20. Category
  21. {
  22. Tags
  23. {
  24. "Queue" = "Transparent"
  25. "IgnoreProjector" = "True"
  26. "RenderType" = "Transparent"
  27. "PreviewType" = "Plane"
  28. "CanUseSpriteAtlas" = "True"
  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. ZTest [unity_GUIZTestMode]
  42. Blend SrcAlpha OneMinusSrcAlpha
  43. ColorMask [_ColorMask]
  44. SubShader
  45. {
  46. GrabPass
  47. {
  48. Tags
  49. {
  50. "LightMode" = "Always"
  51. "Queue" = "Background"
  52. }
  53. }
  54. Pass
  55. {
  56. Name "UIBlur_Y"
  57. Tags{ "LightMode" = "Always" }
  58. CGPROGRAM
  59. #pragma vertex vert
  60. #pragma fragment frag
  61. #pragma fragmentoption ARB_precision_hint_fastest
  62. #pragma multi_compile __ IS_BLUR_ALPHA_MASKED
  63. #pragma multi_compile __ IS_SPRITE_VISIBLE
  64. #pragma multi_compile __ UNITY_UI_ALPHACLIP
  65. #include "UIBlur_Shared.cginc"
  66. sampler2D _GrabTexture;
  67. float4 _GrabTexture_TexelSize;
  68. half4 frag(v2f IN) : COLOR
  69. {
  70. half4 pixel_raw = tex2D(_MainTex, IN.uvmain);
  71. return GetBlurInDir(IN, pixel_raw, _GrabTexture, _GrabTexture_TexelSize, 0, 1);
  72. }
  73. ENDCG
  74. }
  75. GrabPass
  76. {
  77. Tags
  78. {
  79. "LightMode" = "Always"
  80. "Queue" = "Background"
  81. }
  82. }
  83. Pass
  84. {
  85. Name "UIBlur_X"
  86. Tags{ "LightMode" = "Always" }
  87. CGPROGRAM
  88. #pragma vertex vert
  89. #pragma fragment frag
  90. #pragma fragmentoption ARB_precision_hint_fastest
  91. #pragma multi_compile __ IS_BLUR_ALPHA_MASKED
  92. #pragma multi_compile __ IS_SPRITE_VISIBLE
  93. #pragma multi_compile __ UNITY_UI_ALPHACLIP
  94. #include "UIBlur_Shared.cginc"
  95. sampler2D _GrabTexture;
  96. float4 _GrabTexture_TexelSize;
  97. half4 frag(v2f IN) : COLOR
  98. {
  99. half4 pixel_raw = tex2D(_MainTex, IN.uvmain);
  100. #if IS_SPRITE_VISIBLE
  101. return layerBlend(
  102. // Layer 0 : The blurred background
  103. GetBlurInDir(IN, pixel_raw, _GrabTexture, _GrabTexture_TexelSize, 1, 0),
  104. // Layer 1 : The sprite itself
  105. pixel_raw * IN.color
  106. );
  107. #else
  108. return GetBlurInDir(IN, pixel_raw, _GrabTexture, _GrabTexture_TexelSize, 1, 0);
  109. #endif
  110. }
  111. ENDCG
  112. }
  113. }
  114. }
  115. Fallback "UI/Default"
  116. }