diff --git a/src/cache.h b/src/cache.h index 14c0260..ed40536 100644 --- a/src/cache.h +++ b/src/cache.h @@ -11,7 +11,7 @@ #define SHADOW_TEX_SIZE 1024 #define FOG_DIST (18 * 1024) -#define WATER_FOG_DIST (8 * 1024) +#define WATER_FOG_DIST (6 * 1024) //#define WATER_USE_GRID #define UNDERWATER_COLOR "#define UNDERWATER_COLOR vec3(0.6, 0.9, 0.9)\n" diff --git a/src/shaders/shader.glsl b/src/shaders/shader.glsl index 2900fdb..4345cf3 100644 --- a/src/shaders/shader.glsl +++ b/src/shaders/shader.glsl @@ -119,14 +119,17 @@ varying vec4 vTexCoord; // xy - atlas coords, zw - caustics coords float fog; #ifdef UNDERWATER - float d = abs((vViewVec.w - max(uViewPos.y, uParam.y)) / normalize(vViewVec.xyz).y); - d *= step(0.0, vViewVec.w - uParam.y); + float d; + if (uViewPos.y < uParam.y) + d = abs((coord.y - uParam.y) / normalize(vViewVec.xyz).y); + else + d = length(uViewPos - coord.xyz); fog = d * WATER_FOG_DIST; #else fog = length(vViewVec.xyz); #endif - vNormal.w = 1.0 - clamp(1.0 / exp(fog), 0.0, 1.0); + vNormal.w = clamp(1.0 / exp(fog), 0.0, 1.0); #endif return coord; @@ -457,9 +460,9 @@ varying vec4 vTexCoord; // xy - atlas coords, zw - caustics coords #if defined(PASS_COMPOSE) && !defined(TYPE_FLASH) #ifdef UNDERWATER - color.xyz = mix(color.xyz, UNDERWATER_COLOR * 0.2, vNormal.w); + color.xyz = mix(UNDERWATER_COLOR * 0.2, color.xyz, vNormal.w); #else - color.xyz = mix(color.xyz, vec3(0.0), vNormal.w); + color.xyz = mix(vec3(0.0), color.xyz, vNormal.w); #endif #endif