UIBlur.shader 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /*
  2. Simple box blur shader for UI elements, blurring the background.
  3. This variant uses independent grab passes to avoid glitches that occur when
  4. elements touch viewport borders.
  5. This also means it will work with multiple blurry widgets set on top of each
  6. other.
  7. */
  8. Shader "UI/Blur" {
  9. Properties {
  10. [HideInInspector]
  11. _MainTex("", 2D) = "" {}
  12. _Opacity("Opacity", Range(0.0, 1.0)) = 0.5
  13. _Size("Size", Range(1.0, 16.0)) = 4.0
  14. }
  15. SubShader {
  16. Tags {
  17. "Queue" = "Transparent"
  18. "IgnoreProjector" = "True"
  19. "RenderType" = "Transparent"
  20. "PreviewType" = "Plane"
  21. }
  22. Cull Off
  23. ZTest [unity_GUIZTestMode]
  24. ZWrite Off
  25. Blend SrcAlpha OneMinusSrcAlpha
  26. CGINCLUDE
  27. #include "UIBlur.cginc"
  28. sampler2D _GrabTexture;
  29. float4 PS_BlurX(
  30. float4 p : SV_POSITION,
  31. float2 uv1 : TEXCOORD0,
  32. float4 uv2 : TEXCOORD1
  33. ) : SV_TARGET {
  34. return blur_x(uv1, uv2, _GrabTexture);
  35. }
  36. float4 PS_BlurY(
  37. float4 p : SV_POSITION,
  38. float2 uv1 : TEXCOORD0,
  39. float4 uv2 : TEXCOORD1,
  40. float4 img_color : COLOR
  41. ) : SV_TARGET {
  42. return blur_y(uv1, uv2, img_color, _GrabTexture);
  43. }
  44. ENDCG
  45. GrabPass {
  46. Tags {
  47. "LightMode" = "Always"
  48. }
  49. }
  50. Pass {
  51. CGPROGRAM
  52. #pragma vertex VS_QuadProj
  53. #pragma fragment PS_BlurX
  54. ENDCG
  55. }
  56. GrabPass {
  57. Tags {
  58. "LightMode" = "Always"
  59. }
  60. }
  61. Pass {
  62. CGPROGRAM
  63. #pragma vertex VS_QuadProjColor
  64. #pragma fragment PS_BlurY
  65. ENDCG
  66. }
  67. }
  68. }