From 88925dcb3882ef58764cc1fcd1879eb545c9f0a0 Mon Sep 17 00:00:00 2001 From: Merlin1809 <88194861+Merlin1809@users.noreply.github.com> Date: Sun, 7 Dec 2025 00:51:46 +0100 Subject: [PATCH] Improve water sim during slow movements --- shaders/dimensions/prepare.csh | 21 +++++++++++++++++++++ shaders/dimensions/prepare1.csh | 13 +------------ shaders/dimensions/voxy.json | 4 ++++ shaders/lang/en_us.lang | 2 +- shaders/lang/zh_cn.lang | 2 +- shaders/lib/SSBOs.glsl | 4 ++++ 6 files changed, 32 insertions(+), 14 deletions(-) diff --git a/shaders/dimensions/prepare.csh b/shaders/dimensions/prepare.csh index 536582d..84fc4c9 100644 --- a/shaders/dimensions/prepare.csh +++ b/shaders/dimensions/prepare.csh @@ -26,6 +26,17 @@ uint GetVoxelBlock(const in ivec3 voxelPos) { uniform bool is_sneaking; uniform float frameTimeCounter; +vec2 getPlayerMovementOffset() { + vec2 currentPos = cameraPosition.xz-relativeEyePosition.xz; + vec2 previousPos = previousCameraPositionWave2.xz; + vec2 movement = currentPos - previousPos; + #if WATER_SIM_SCALE == 0 + return -20.0 * movement; + #else + return -40.0 * movement * WATER_SIM_SCALE; + #endif +} + void main() { #if WATER_INTERACTION == 2 if (abs(frameTimeCounter - lastFrameTimeCount) > WATER_SIM_FRAMETIME) { @@ -69,6 +80,16 @@ void main() { if(inBoatCurrentFrame || inBoatLastFrame || inBoat2Frames) inBoat = true; if(inShipCurrentFrame || inShipLastFrame || inShip2Frames) inShip = true; + + vec2 playerMovement = getPlayerMovementOffset(); + water_move_ompensation_counter_SSBO += playerMovement; + + water_move_compensationSSBO = ivec2(0); + ivec2 offset = ivec2(trunc(water_move_ompensation_counter_SSBO)); + if (any(notEqual(offset, ivec2(0)))) { + water_move_compensationSSBO = offset; + water_move_ompensation_counter_SSBO -= vec2(offset); + } } #endif } \ No newline at end of file diff --git a/shaders/dimensions/prepare1.csh b/shaders/dimensions/prepare1.csh index 759e643..0cbfd7d 100644 --- a/shaders/dimensions/prepare1.csh +++ b/shaders/dimensions/prepare1.csh @@ -51,17 +51,6 @@ uniform vec3 relativeEyePosition; #include "/lib/SSBOs.glsl" -vec2 getPlayerMovementOffset() { - vec2 currentPos = cameraPosition.xz-relativeEyePosition.xz; - vec2 previousPos = previousCameraPositionWave2.xz; - vec2 movement = currentPos - previousPos; - #if WATER_SIM_SCALE == 0 - return -20.0 * movement; - #else - return -40.0 * movement * WATER_SIM_SCALE; - #endif -} - // Make this a smaller number for a smaller timestep. // Don't make it bigger than 1.4 or the universe will explode. #if WATER_SIM_SCALE == 0 @@ -80,7 +69,7 @@ void main() { float dist = length(imgCoord-0.5*resolution); if (dist >= resolution.x) return; - ivec2 movementOffset = ivec2(round(getPlayerMovementOffset())); + ivec2 movementOffset = water_move_compensationSSBO; ivec2 sampledCoord = imgCoord - movementOffset; sampledCoord = clamp(sampledCoord, ivec2(1), resolution - ivec2(1)); diff --git a/shaders/dimensions/voxy.json b/shaders/dimensions/voxy.json index 4648edf..7cce4b9 100644 --- a/shaders/dimensions/voxy.json +++ b/shaders/dimensions/voxy.json @@ -56,6 +56,10 @@ bool noSimOngoing; bool noSimOngoingCheck; + + ivec2 water_move_compensationSSBO; + + vec2 water_move_ompensation_counter_SSBO; }"}, "useViewportDims": true, diff --git a/shaders/lang/en_us.lang b/shaders/lang/en_us.lang index 812593f..ca29c85 100644 --- a/shaders/lang/en_us.lang +++ b/shaders/lang/en_us.lang @@ -1,6 +1,6 @@ option.SHADER_VERSION_LABEL = §d§lECLIPSE§r - A Bliss Edit prefix.SHADER_VERSION_LABEL = V - value.SHADER_VERSION_LABEL.482 = 5.6.0 + value.SHADER_VERSION_LABEL.482 = 5.6.1 # if you're here to translate, this is not a joke, these do what they say profile.POTATO=§4Potato diff --git a/shaders/lang/zh_cn.lang b/shaders/lang/zh_cn.lang index 84976c1..def3889 100644 --- a/shaders/lang/zh_cn.lang +++ b/shaders/lang/zh_cn.lang @@ -1,6 +1,6 @@ option.SHADER_VERSION_LABEL = §d§lECLIPSE§r - Bliss 编辑版 prefix.SHADER_VERSION_LABEL = 版本 - value.SHADER_VERSION_LABEL.482 = 5.6.0 + value.SHADER_VERSION_LABEL.482 = 5.6.1 # 如果你是来翻译的,这不是玩笑,这些选项的功能正如其名 profile.POTATO=§4土豆 (极低配置) diff --git a/shaders/lib/SSBOs.glsl b/shaders/lib/SSBOs.glsl index a535153..f2a2e75 100644 --- a/shaders/lib/SSBOs.glsl +++ b/shaders/lib/SSBOs.glsl @@ -32,4 +32,8 @@ layout(binding = 0) buffer SSBO1 { bool noSimOngoing; // 1 byte bool noSimOngoingCheck; // 1 byte + + ivec2 water_move_compensationSSBO; // idk + + vec2 water_move_ompensation_counter_SSBO; // 8 bytes }; \ No newline at end of file