From fca51c7e61fdfd577ebc893538e76148a60ec91a Mon Sep 17 00:00:00 2001 From: Onek8 Date: Wed, 16 Sep 2026 22:44:16 -0700 Subject: [PATCH] Water Level/Reflectopm --- leenkx/Shaders/water_pass/water_pass.frag.glsl | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/leenkx/Shaders/water_pass/water_pass.frag.glsl b/leenkx/Shaders/water_pass/water_pass.frag.glsl index efe72a37..bce540ca 100644 --- a/leenkx/Shaders/water_pass/water_pass.frag.glsl +++ b/leenkx/Shaders/water_pass/water_pass.frag.glsl @@ -228,12 +228,16 @@ void main() { // Blinn-Phong specular using half-vector, faded at horizon vec3 h = normalize(v + ld); float specAmount = pow(max(dot(n2, h), 0.0), 200.0) * (200.0 + 8.0) / (PI * 8.0); - fragColor.rgb += specAmount * (isSky ? 0.3 : 1.0) * horizonFactor; + fragColor.rgb += specAmount * (isSky ? 0.3 : 1.0); // Depth fog - blend toward waterColor with depth, faded at horizon float depthFog = clamp(-(geomZ - waterLevel) * waterDensity, 0.0, 0.9); fragColor.rgb = mix(fragColor.rgb, waterColor, depthFog * horizonFactor); // Alpha fades smoothly at horizon instead of hard cut - fragColor.a = isSky ? horizonFactor : clamp(abs(geomZ - waterLevel) * 5.0, 0.0, 1.0); + // Skydome sits 3.5 below the camera (_skydomeMatrix), so its horizon + // appears where the ray z reaches -3.5 / domeRadius + float farPlane = cameraProj.y / (1.0 - cameraProj.x); + float horizonFade = clamp((-3.5 / (farPlane * 0.95) - vray.z) * 20.0, 0.0, 1.0); + fragColor.a = isSky ? horizonFade : clamp(abs(geomZ - waterLevel) * 5.0, 0.0, 1.0); // Foam - based on actual geometry depth below water surface float fd = isSky ? 1.0 : abs(geomZ - waterLevel);