Shader "Custom/GlitchAnalog" { Properties { _MainTex ("Texture", 2D) = "white" {} _GlitchIntensity ("Glitch Intensity", Range(0,1)) = 0.5 } SubShader { Tags { "Queue"="Overlay" "RenderType"="Transparent" } ZTest Always ZWrite Off Cull Off Blend SrcAlpha OneMinusSrcAlpha Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" sampler2D _MainTex; float4 _MainTex_ST; float _GlitchIntensity; struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } float nrand(float x, float y) { float2 p = float2(x, y); float n = sin(dot(p, float2(12.9898, 78.233))) * 43758.5453; n = frac(n); n += frac(sin(dot(p * 2.0, float2(39.3468, 11.1351)) + _Time.y * 1.7) * 23421.631); n += frac(sin(dot(p * 4.0, float2(73.1567, 52.2351)) - _Time.y * 2.3) * 12345.678); return frac(n); } fixed4 frag (v2f i) : SV_Target { float2 uv = i.uv; float4 rgba = tex2D(_MainTex, uv); // 统一强度控制 float intensity = _GlitchIntensity; // 色彩分离和撕裂 float chromaAmount = (0.01 + abs(sin(_Time.y * 1.3)) * 0.02) * intensity; float tearStrength = (nrand(uv.y * 20.0 + _Time.y * 2.0, _Time.y * 1.3) - 0.5) * 0.15 * intensity; float2 uvR = uv + float2(chromaAmount, 0) + float2(tearStrength, 0); float2 uvG = uv + float2(0, 0) + float2(tearStrength * 0.5, 0); float2 uvB = uv - float2(chromaAmount, 0) + float2(tearStrength, 0); float r = tex2D(_MainTex, frac(uvR)).r; float g = tex2D(_MainTex, frac(uvG)).g; float b = tex2D(_MainTex, frac(uvB)).b; float3 chromaColor = float3(r, g, b); // 扫描线扰动 float scanJitter = (nrand(uv.y * 60.0, _Time.y * 0.5) - 0.5) * 0.2 * intensity; float2 scanUV = uv + float2(scanJitter, 0); float3 scanColor = tex2D(_MainTex, frac(scanUV)).rgb; // 明暗扫描线效果 float scanLine = 0.85 + 0.15 * sin(uv.y * 800.0 + _Time.y * 10.0); scanColor *= scanLine; // 合成最终颜色 float3 finalColor = lerp(chromaColor, scanColor, 0.7 * intensity); return float4(finalColor, rgba.a); } ENDCG } } }