diff --git a/Assets/Materials/M_HuoshanScreenGlitch.mat b/Assets/Materials/M_HuoshanScreenGlitch.mat index 32cb1e531..349b6a393 100644 --- a/Assets/Materials/M_HuoshanScreenGlitch.mat +++ b/Assets/Materials/M_HuoshanScreenGlitch.mat @@ -30,20 +30,20 @@ Material: m_Ints: [] m_Floats: - _BloomBoost: 0.6 - - _Chaos: 0.5 - - _ColorDamage: 1 + - _Chaos: 0.3 + - _ColorDamage: 1.45 - _Emissive: 1.5 - _Ghost: 0.35 - _GlitchIntensity: 0 - - _Grit: 1 + - _Grit: 0.55 - _Rage: 0 - _Scale: 1.6 - _Speed: 1 - _SurgeRate: 0.5 - _Vignette: 0.28 - - _Warp: 1 + - _Warp: 1.25 m_Colors: - _Color: {r: 1, g: 1, b: 1, a: 1} - _PhosphorColor: {r: 0.44716978, g: 1, b: 0.74689186, a: 1} - - _RageColor: {r: 1, g: 0.188, b: 0.302, a: 1} + - _RageColor: {r: 0.44716978, g: 1, b: 0.74689186, a: 1} m_BuildTextureStacks: [] diff --git a/Assets/Shader/HuoshanScreenGlitch.hlsl b/Assets/Shader/HuoshanScreenGlitch.hlsl index c50aefe51..635623618 100644 --- a/Assets/Shader/HuoshanScreenGlitch.hlsl +++ b/Assets/Shader/HuoshanScreenGlitch.hlsl @@ -259,7 +259,7 @@ half4 HuoshanScreenGlitchFrag(Varyings input) : SV_Target float2 sampleUV = float2(uv.x + xOff, frac(uv.y + rollPos + vJit)); // ── 采样:荧光化 + 彩色镶边(随损坏加深,撕裂带内额外拉开)。 - float fringe = (0.0012 + 0.005 * drive + 0.015 * drop) + float fringe = (0.0018 + 0.009 * drive + 0.022 * drop) * _ColorDamage * (1.0 + bandOn * 1.5); half3 col = SamplePhosphorFringed(sampleUV, fringe, tint); @@ -275,7 +275,9 @@ half4 HuoshanScreenGlitchFrag(Varyings input) : SV_Target float flash = flashGate * smoothstep(0.15, 0.25, cyc) * (1.0 - smoothstep(0.40, 0.55, cyc)); - col *= 1.0 - loss * (1.0 - 0.75 * flash); + // 画面不压到全黑:留一层底,撕裂 / 滚屏 / 色度错乱才有东西可作用在上面。 + // 压死了就只剩雪花,读作"没信号"而不是"信号在坏"。 + col *= 1.0 - loss * 0.66 * (1.0 - 0.75 * flash); // ── 撕裂带内亮度错档:带和带之间电平接不上,撕裂在平色区域也看得见。 col *= 1.0 + bandOn * (hash11(bandId * 7.7 + frameSeed) - 0.4) @@ -300,10 +302,12 @@ half4 HuoshanScreenGlitchFrag(Varyings input) : SV_Target float2 cell = floor(pixelPos / max(1.0, grainPx)); float snowVal = hash21(cell + frameSeed * float2(11.13, 5.71)); float rowSnow = step(0.975 - 0.08 * drive, hash21(float2(row, frameSeed + 3.0))); - float snowAmt = saturate( - saturate(_Grit) * (0.025 + 0.09 * drive + rowSnow * 0.30 * drive) - + loss * 0.30 - + drop * 0.9); + // 信号丢失 / 掉台的雪花也走 _Grit——否则高档位时雪花由 loss、drop 独断, + // 旋钮拧到 0 都压不下去,屏幕只会糊成一片白。 + float snowAmt = saturate(saturate(_Grit) * ( + 0.025 + 0.09 * drive + rowSnow * 0.30 * drive + + loss * 0.16 + + drop * 0.55)); half3 snowCol = snowVal * half3(0.92, 0.97, 1.08) * lerp(0.7, 1.05, hash21(cell.yx + frameSeed)); col = lerp(col, snowCol, snowAmt);