-
-
Save JohannesMP/7d62f282705169a2855a0aac315ff381 to your computer and use it in GitHub Desktop.
Shader "Custom/UIBlur" | |
{ | |
Properties | |
{ | |
[Toggle(IS_BLUR_ALPHA_MASKED)] _IsAlphaMasked("Image Alpha Masks Blur", Float) = 1 | |
[Toggle(IS_SPRITE_VISIBLE)] _IsSpriteVisible("Show Image", Float) = 1 | |
// Internally enforced by MAX_RADIUS | |
_Radius("Blur Radius", Range(0, 64)) = 1 | |
_OverlayColor("Blurred Overlay/Opacity", Color) = (0.5, 0.5, 0.5, 1) | |
// see Stencil in UI/Default | |
[HideInInspector][PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {} | |
[HideInInspector]_StencilComp ("Stencil Comparison", Float) = 8 | |
[HideInInspector]_Stencil ("Stencil ID", Float) = 0 | |
[HideInInspector]_StencilOp ("Stencil Operation", Float) = 0 | |
[HideInInspector]_StencilWriteMask ("Stencil Write Mask", Float) = 255 | |
[HideInInspector]_StencilReadMask ("Stencil Read Mask", Float) = 255 | |
[HideInInspector]_ColorMask ("Color Mask", Float) = 15 | |
[HideInInspector]_UseUIAlphaClip ("Use Alpha Clip", Float) = 0 | |
} | |
Category | |
{ | |
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] | |
SubShader | |
{ | |
GrabPass | |
{ | |
Tags | |
{ | |
"LightMode" = "Always" | |
"Queue" = "Background" | |
} | |
} | |
Pass | |
{ | |
Name "UIBlur_Y" | |
Tags{ "LightMode" = "Always" } | |
CGPROGRAM | |
#pragma vertex vert | |
#pragma fragment frag | |
#pragma fragmentoption ARB_precision_hint_fastest | |
#pragma multi_compile __ IS_BLUR_ALPHA_MASKED | |
#pragma multi_compile __ IS_SPRITE_VISIBLE | |
#pragma multi_compile __ UNITY_UI_ALPHACLIP | |
#include "UIBlur_Shared.cginc" | |
sampler2D _GrabTexture; | |
float4 _GrabTexture_TexelSize; | |
half4 frag(v2f IN) : COLOR | |
{ | |
half4 pixel_raw = tex2D(_MainTex, IN.uvmain); | |
return GetBlurInDir(IN, pixel_raw, _GrabTexture, _GrabTexture_TexelSize, 0, 1); | |
} | |
ENDCG | |
} | |
GrabPass | |
{ | |
Tags | |
{ | |
"LightMode" = "Always" | |
"Queue" = "Background" | |
} | |
} | |
Pass | |
{ | |
Name "UIBlur_X" | |
Tags{ "LightMode" = "Always" } | |
CGPROGRAM | |
#pragma vertex vert | |
#pragma fragment frag | |
#pragma fragmentoption ARB_precision_hint_fastest | |
#pragma multi_compile __ IS_BLUR_ALPHA_MASKED | |
#pragma multi_compile __ IS_SPRITE_VISIBLE | |
#pragma multi_compile __ UNITY_UI_ALPHACLIP | |
#include "UIBlur_Shared.cginc" | |
sampler2D _GrabTexture; | |
float4 _GrabTexture_TexelSize; | |
half4 frag(v2f IN) : COLOR | |
{ | |
half4 pixel_raw = tex2D(_MainTex, IN.uvmain); | |
#if IS_SPRITE_VISIBLE | |
return layerBlend( | |
// Layer 0 : The blurred background | |
GetBlurInDir(IN, pixel_raw, _GrabTexture, _GrabTexture_TexelSize, 1, 0), | |
// Layer 1 : The sprite itself | |
pixel_raw * IN.color | |
); | |
#else | |
return GetBlurInDir(IN, pixel_raw, _GrabTexture, _GrabTexture_TexelSize, 1, 0); | |
#endif | |
} | |
ENDCG | |
} | |
} | |
} | |
Fallback "UI/Default" | |
} |
Hello. Shader works great!. Can the code be used freely in commercial projects?
Please absolutely feel free! If you do end up using it I’d love to know :)
As far as Licensing is concerned I am releasing this under the MIT License, so you are allowed to do what you wish but I also assume no responsibility in case (however unlikely) that it breaks anything. You are using code from the internet, so please exercise due diligence :)
If you can credit me, great, but I don’t require it.
Lastly I would still encourage you to write your own version to suit your specific needs. This has not been optimized or tested on various hardware configurations, and is primarily intended as a proof of concept to use as a starting point for anyone wishing to implement a similar effect.
I'll gladly credit you. By the looks of it you can expect to be credited on obscure game on steam, probably around q3 of 2049 or so :)). I promise i'll let you know !
As of rewriting it, sadly not everyone is born equal, i'm untouched by ainur, and there is no shader magic running through my veins ^^.
@JohannesMP Thank you for the shader. I tried yours and another free online solution (that I got working in the first place), and yours produces a better looking blur effect.
Hello there. Just a few questions regarding this shader:
- Is it performance friendy? As in: does it work well in mobile?
- Does it work with Screen Space - Camera?
- Does it work with 2022 LTS?
Really awesome, helps me a lot
I think it is useful to build something like the floaters in eyes
Hello. Shader works great!. Can the code be used freely in commercial projects?