From 2ac7822c3ec21bea6ed2a18c8721c472437ac8b4 Mon Sep 17 00:00:00 2001 From: Vova <3emaster@gmail.com> Date: Tue, 14 Mar 2023 21:36:42 +0200 Subject: [PATCH] blur shader --- Assets/Shaders.meta | 8 ++ Assets/Shaders/Frosted glass.shader | 154 +++++++++++++++++++++++ Assets/Shaders/Frosted glass.shader.meta | 9 ++ 3 files changed, 171 insertions(+) create mode 100644 Assets/Shaders.meta create mode 100644 Assets/Shaders/Frosted glass.shader create mode 100644 Assets/Shaders/Frosted glass.shader.meta diff --git a/Assets/Shaders.meta b/Assets/Shaders.meta new file mode 100644 index 00000000..11ffb4ce --- /dev/null +++ b/Assets/Shaders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 145344f41a295324da7dfe005fd9a082 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders/Frosted glass.shader b/Assets/Shaders/Frosted glass.shader new file mode 100644 index 00000000..b869754f --- /dev/null +++ b/Assets/Shaders/Frosted glass.shader @@ -0,0 +1,154 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +Shader "Unlit/FrostedGlass" +{ + Properties + { + _Radius("Radius", Range(1, 255)) = 1 + } + + Category + { + Tags{ "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Opaque" } + + SubShader + { + GrabPass + { + Tags{ "LightMode" = "Always" } + } + + Pass + { + Tags{ "LightMode" = "Always" } + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma fragmentoption ARB_precision_hint_fastest + #include "UnityCG.cginc" + + struct appdata_t + { + float4 vertex : POSITION; + float2 texcoord: TEXCOORD0; + }; + + struct v2f + { + float4 vertex : POSITION; + float4 uvgrab : TEXCOORD0; + }; + + v2f vert(appdata_t v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + #if UNITY_UV_STARTS_AT_TOP + float scale = -1.0; + #else + float scale = 1.0; + #endif + o.uvgrab.xy = (float2(o.vertex.x, o.vertex.y*scale) + o.vertex.w) * 0.5; + o.uvgrab.zw = o.vertex.zw; + return o; + } + + sampler2D _GrabTexture; + float4 _GrabTexture_TexelSize; + float _Radius; + + half4 frag(v2f i) : COLOR + { + half4 sum = half4(0,0,0,0); + + #define GRABXYPIXEL(kernelx, kernely) tex2Dproj( _GrabTexture, UNITY_PROJ_COORD(float4(i.uvgrab.x + _GrabTexture_TexelSize.x * kernelx, i.uvgrab.y + _GrabTexture_TexelSize.y * kernely, i.uvgrab.z, i.uvgrab.w))) + + sum += GRABXYPIXEL(0.0, 0.0); + int measurments = 1; + + for (float range = 0.1f; range <= _Radius; range += 0.1f) + { + sum += GRABXYPIXEL(range, range); + sum += GRABXYPIXEL(range, -range); + sum += GRABXYPIXEL(-range, range); + sum += GRABXYPIXEL(-range, -range); + measurments += 4; + } + + return sum / measurments; + } + ENDCG + } + GrabPass + { + Tags{ "LightMode" = "Always" } + } + + Pass + { + Tags{ "LightMode" = "Always" } + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma fragmentoption ARB_precision_hint_fastest + #include "UnityCG.cginc" + + struct appdata_t + { + float4 vertex : POSITION; + float2 texcoord: TEXCOORD0; + }; + + struct v2f + { + float4 vertex : POSITION; + float4 uvgrab : TEXCOORD0; + }; + + v2f vert(appdata_t v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + #if UNITY_UV_STARTS_AT_TOP + float scale = -1.0; + #else + float scale = 1.0; + #endif + o.uvgrab.xy = (float2(o.vertex.x, o.vertex.y*scale) + o.vertex.w) * 0.5; + o.uvgrab.zw = o.vertex.zw; + return o; + } + + sampler2D _GrabTexture; + float4 _GrabTexture_TexelSize; + float _Radius; + + half4 frag(v2f i) : COLOR + { + + half4 sum = half4(0,0,0,0); + float radius = 1.41421356237 * _Radius; + + #define GRABXYPIXEL(kernelx, kernely) tex2Dproj( _GrabTexture, UNITY_PROJ_COORD(float4(i.uvgrab.x + _GrabTexture_TexelSize.x * kernelx, i.uvgrab.y + _GrabTexture_TexelSize.y * kernely, i.uvgrab.z, i.uvgrab.w))) + + sum += GRABXYPIXEL(0.0, 0.0); + int measurments = 1; + + for (float range = 1.41421356237f; range <= radius * 1.41; range += 1.41421356237f) + { + sum += GRABXYPIXEL(range, 0); + sum += GRABXYPIXEL(-range, 0); + sum += GRABXYPIXEL(0, range); + sum += GRABXYPIXEL(0, -range); + measurments += 4; + } + + return sum / measurments; + } + ENDCG + } + } + } +} \ No newline at end of file diff --git a/Assets/Shaders/Frosted glass.shader.meta b/Assets/Shaders/Frosted glass.shader.meta new file mode 100644 index 00000000..5cd94625 --- /dev/null +++ b/Assets/Shaders/Frosted glass.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 907e3f669920bac419685e0b3f83fba3 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: