art(huoshan): 压低高档雪花并保留故障底

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-25 18:29:01 +08:00
co-authored by Cursor
parent 2db69b1cff
commit d4429deddc
2 changed files with 15 additions and 11 deletions
+5 -5
View File
@@ -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: []
+10 -6
View File
@@ -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);