From b836f675e12204cb039459491c4198d32c879524 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 6 Jun 2026 11:04:20 -0500 Subject: [PATCH] fix 3-layer clouds culling at low render distances --- .../render/renderer/CloudRenderHandler.java | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/CloudRenderHandler.java b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/CloudRenderHandler.java index 5986e5372..1153d0525 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/CloudRenderHandler.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/CloudRenderHandler.java @@ -388,16 +388,17 @@ public class CloudRenderHandler float newMinPosX = - cloudParams.deltaOffsetX - + (cloudParams.instanceOffsetX * cloudParams.widthInBlocks) - + instanceOffsetX + cloudParams.halfWidthInBlocks; + cloudParams.deltaOffsetX + + (cloudParams.instanceOffsetX * cloudParams.widthInBlocks) + + instanceOffsetX + cloudParams.halfWidthInBlocks; float newMinPosY = this.level.getLevelWrapper().getMaxHeight() + 200 // render clouds at least 200 blocks above the height limit to prevent players/blocks from intersecting (since DH always renders behind everything else) + cloudParams.heightOffset; - float newMinPosZ = cloudParams.deltaOffsetZ - + (cloudParams.instanceOffsetZ * cloudParams.widthInBlocks) - + instanceOffsetZ + cloudParams.halfWidthInBlocks; + float newMinPosZ = + cloudParams.deltaOffsetZ + + (cloudParams.instanceOffsetZ * cloudParams.widthInBlocks) + + instanceOffsetZ + cloudParams.halfWidthInBlocks; boolean cullCloud = this.shouldCloudBeCulled( newMinPosX, newMinPosY, newMinPosZ, @@ -515,10 +516,13 @@ public class CloudRenderHandler DhVec3f cameraLookAtVector = MC_RENDER.getLookAtVector(); cameraLookAtVector.normalize(); - double renderDistance = Config.Client.Advanced.Graphics.Quality.lodChunkRenderDistanceRadius.get() - // * 1.5 is so we have a little extra buffer where clouds will render further than - // necessary to prevent seeing the cloud border - * LodUtil.CHUNK_WIDTH * 1.5; + double renderDistance = + // minimum distance of 256 to handle 3-layer clouds correctly, + // otherwise the upper layers will be culled + Math.max(Config.Client.Advanced.Graphics.Quality.lodChunkRenderDistanceRadius.get(), 256) + // * 1.5 is so we have a little extra buffer where clouds will render further than + // necessary to prevent seeing the cloud border + * LodUtil.CHUNK_WIDTH * 1.5;