72 lines
2.6 KiB
Plaintext
72 lines
2.6 KiB
Plaintext
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
|
|
}
|
|
}
|
|
}
|