Shader "Hidden/Bansonic/GlobalGlitch" { SubShader { Tags { "RenderPipeline" = "UniversalPipeline" } ZWrite Off Cull Off ZTest Always Pass { Name "GlobalGlitch" HLSLPROGRAM #pragma vertex Vert #pragma fragment Frag #pragma target 4.5 #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" #include "Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blit.hlsl" float _GlitchIntensity; float _BlockStrength; float _ColorSplit; float _JitterAmount; float _StripFrequency; float _ScanlineStrength; float Hash(float2 p) { p = frac(p * float2(123.34, 345.45)); p += dot(p, p + 34.345); return frac(p.x * p.y); } half4 Frag(Varyings input) : SV_Target { float2 uv = input.texcoord; float timeSlice = floor(_Time.y * 24.0); float stripIndex = floor(uv.y * _StripFrequency); float stripNoise = Hash(float2(stripIndex, timeSlice)); float blockMask = step(0.58, stripNoise); float blockShift = (stripNoise - 0.5) * _BlockStrength * 0.12 * _GlitchIntensity * blockMask; float lineJitter = sin((uv.y + _Time.y * 14.0) * 420.0) * _JitterAmount * 0.003 * _GlitchIntensity; float combinedShift = blockShift + lineJitter; float2 baseUv = uv; baseUv.x = clamp(baseUv.x + combinedShift, 0.0, 1.0); float colorSplit = _ColorSplit * _GlitchIntensity; float2 redUv = float2(clamp(baseUv.x + colorSplit, 0.0, 1.0), baseUv.y); float2 greenUv = baseUv; float2 blueUv = float2(clamp(baseUv.x - colorSplit, 0.0, 1.0), baseUv.y); half red = SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, redUv).r; half green = SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, greenUv).g; half blue = SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, blueUv).b; half4 color = half4(red, green, blue, 1.0); float scan = sin(uv.y * _ScreenParams.y * 1.15 + _Time.y * 12.0) * 0.5 + 0.5; float scanMask = lerp(1.0, 1.0 - scan * 0.35, _ScanlineStrength * _GlitchIntensity); color.rgb *= scanMask; return color; } ENDHLSL } } }