From 6dfdee75e2002498911bd2eef2a75a4ebb14f397 Mon Sep 17 00:00:00 2001 From: Orkuncakilkaya Date: Wed, 16 Sep 2026 15:15:28 +0300 Subject: [PATCH] fix(render3d): a lake can be the mirrored water, with its own wet shore A reflecting body is clipped to its ellipse like every other unless it is an unbounded sea, so a map whose reflection belongs to its lake (Maroon Lake, once its sea sits below it) does not draw that lake's level over every hollow in the survey. The terrain's wet shore and its forest and scree gates read the carved lake's line inside its outline (u_lake), the rule grass already used. SPIR-V regenerated. Co-Authored-By: Claude Opus 5 --- changes/lake-water.md | 8 +++ .../shaders/spv/1f95f31b.frag.spv | Bin 85684 -> 86868 bytes .../shaders/spv/2e2908c8.frag.spv | Bin 87584 -> 88768 bytes .../shaders/spv/5e4589a1.frag.spv | Bin 100348 -> 101532 bytes .../shaders/spv/a0f2dbac.frag.spv | Bin 100348 -> 101532 bytes .../shaders/spv/f2952361.frag.spv | Bin 102216 -> 103400 bytes .../shaders/spv/f4382918.frag.spv | Bin 85684 -> 86868 bytes .../ludic.render3d/shaders/spv/manifest.txt | 66 ++++++++++-------- packages/ludic.render3d/shaders/terrain.frag | 15 +++- packages/ludic.render3d/terrain.ludic | 1 + packages/ludic.render3d/water.ludic | 7 +- 11 files changed, 62 insertions(+), 35 deletions(-) create mode 100644 changes/lake-water.md diff --git a/changes/lake-water.md b/changes/lake-water.md new file mode 100644 index 00000000..5625420f --- /dev/null +++ b/changes/lake-water.md @@ -0,0 +1,8 @@ +bump: patch +type: fix +**A lake can be the water that mirrors the world** — a reflecting body is clipped to its +ellipse like any other unless it is an unbounded sea, so a map whose reflection belongs to +its lake no longer floods every hollow in the survey with that lake's level; and the +terrain's wet shore, forest and scree gates read the carved lake's line inside its outline +(`u_lake`), the rule the grass already used, so a lake above the sea keeps its wet bank and +no forest is painted down its bed. diff --git a/packages/ludic.render3d/shaders/spv/1f95f31b.frag.spv b/packages/ludic.render3d/shaders/spv/1f95f31b.frag.spv index 145a3ace05a79b5cae90220cf042abd4dfbc73e3..fcb7c1fe87003449b5428d68c9de5406e15048ce 100644 GIT binary patch literal 86868 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