fix water interaction

This commit is contained in:
Merlin1809 committed 2025-07-13 17:56:07 +02:00
1 parent df71e839af
commit 938854bd02
2 files changed
+30 -7

No files matched your search

+16 -5
View File
@@ -108,6 +108,10 @@ uniform float waterEnteredAltitude;
uniform vec3 waterEnteredPosition;
uniform float waterEnteredTime;
uniform vec3 waterEnteredVelocity;
uniform vec3 waterExitedPosition;
uniform float waterExitedTime;
uniform vec3 waterExitedVelocity;
#endif
#include "/lib/util.glsl"
@@ -574,22 +578,29 @@ if (gl_FragCoord.x * texelSize.x < 1.0 && gl_FragCoord.y * texelSize.y < 1.0 )
vec3 bump = normalize(getWaveNormal(waterPos, playerPos));
float bumpmult = WATER_WAVE_STRENGTH;
bump = bump * vec3(bumpmult, bumpmult, bumpmult) + vec3(0.0f, 0.0f, 1.0f - bumpmult);
// nice little wave effect when leaving water
#ifdef WATER_INTERACTION
float distFromWaterPos = length(worldPos - waterEnteredPosition);
vec3 waterPlayerPostion = waterExitedPosition;
float waterTime = waterExitedTime;
vec3 playerVelocity = waterExitedVelocity;
if (isEyeInWater == 1) {
waterPlayerPostion = waterEnteredPosition;
waterTime = waterEnteredTime;
playerVelocity = waterEnteredVelocity;
}
float distFromWaterPos = length(worldPos - waterPlayerPostion);
float maxWaveDist = 3.5;
if (distFromWaterPos < maxWaveDist) {
float newTime = frameTimeCounter - waterEnteredTime;
float newTime = frameTimeCounter - waterTime;
newTime *= 2.15;
float smoothDistFromWaterPos = smoothstep(maxWaveDist, 0.0, distFromWaterPos);
float waveWidth = 0.2;
float waveHeight = 0.3 * smoothstep(2.0, 20.0, length(waterEnteredVelocity)) + 0.5;
float waveHeight = 0.3 * smoothstep(2.0, 20.0, length(playerVelocity)) + 0.5;
float enterWave = waveHeight * smoothstep(newTime - waveWidth, newTime, distFromWaterPos-0.1) * smoothstep(newTime + waveWidth, newTime, distFromWaterPos-0.1) * smoothDistFromWaterPos;
+14 -2
View File
@@ -630,22 +630,34 @@ uniform.bool.isInJungleBiomes = in(biome_category, CAT_JUNGLE)
# force water surface level to a fixed height if you entered the water from an area in low light levels (caves). if youre above the hardcoded y level, allow it use the current height
variable.float.waterEnteredLowLight = if(eyeBrightness.y < 0.004, max(eyeAltitude, SEA_LEVEL), eyeAltitude)
variable.float.waterState = smooth(if(isEyeInWater == 0,1.0,0.0),0.1,0.1)
variable.float.freezeTranstion = if(waterState < 0.35 || waterState > 0.65, 100000000000000.0, 0.0)
variable.float.freezeTranstion = if(isEyeInWater == 1, 100000000000000.0, 0.0)
uniform.float.waterEnteredAltitude = smooth(waterEnteredLowLight, freezeTranstion, freezeTranstion)
#ifdef WATER_INTERACTION
variable.float.freezeTranstion2 = if(isEyeInWater == 0, 100000000000000.0, 0.0)
variable.float.waterEnteredPosition_X = smooth(eyePosition.x, freezeTranstion, freezeTranstion)
variable.float.waterEnteredPosition_Y = smooth(eyePosition.y, freezeTranstion, freezeTranstion)
variable.float.waterEnteredPosition_Z = smooth(eyePosition.z, freezeTranstion, freezeTranstion)
uniform.vec3.waterEnteredPosition = vec3(waterEnteredPosition_X, waterEnteredPosition_Y, waterEnteredPosition_Z)
variable.float.waterExitedPosition_X = smooth(eyePosition.x, freezeTranstion2, freezeTranstion2)
variable.float.waterExitedPosition_Y = smooth(eyePosition.y, freezeTranstion2, freezeTranstion2)
variable.float.waterExitedPosition_Z = smooth(eyePosition.z, freezeTranstion2, freezeTranstion2)
uniform.vec3.waterExitedPosition = vec3(waterExitedPosition_X, waterExitedPosition_Y, waterExitedPosition_Z)
uniform.float.waterEnteredTime = smooth(frameTimeCounter, freezeTranstion, freezeTranstion)
variable.float.waterExitedTime = smooth(frameTimeCounter, freezeTranstion2, freezeTranstion2)
variable.vec3.currentVelocity = cameraPosition - previousCameraPosition
variable.float.waterEnteredVelocity_X = smooth(currentVelocity.x/frameTime, freezeTranstion, freezeTranstion)
variable.float.waterEnteredVelocity_Y = smooth(currentVelocity.y/frameTime, freezeTranstion, freezeTranstion)
variable.float.waterEnteredVelocity_Z = smooth(currentVelocity.z/frameTime, freezeTranstion, freezeTranstion)
uniform.vec3.waterEnteredVelocity = vec3(waterEnteredVelocity_X, waterEnteredVelocity_Y, waterEnteredVelocity_Z)
variable.float.waterExitedVelocity_X = smooth(currentVelocity.x/frameTime, freezeTranstion2, freezeTranstion2)
variable.float.waterExitedVelocity_Y = smooth(currentVelocity.y/frameTime, freezeTranstion2, freezeTranstion2)
variable.float.waterExitedVelocity_Z = smooth(currentVelocity.z/frameTime, freezeTranstion2, freezeTranstion2)
uniform.vec3.waterExitedVelocity = vec3(waterExitedVelocity_X, waterExitedVelocity_Y, waterExitedVelocity_Z)
#endif
variable.float.exitedBiomePos_X = smooth(cameraPosition.x, freezeCameraPos, freezeCameraPos)