diff --git a/blight-editor/src/main/java/de/blight/editor/state/VoxelEditorState.java b/blight-editor/src/main/java/de/blight/editor/state/VoxelEditorState.java index 37be0a0..a3cddd3 100644 --- a/blight-editor/src/main/java/de/blight/editor/state/VoxelEditorState.java +++ b/blight-editor/src/main/java/de/blight/editor/state/VoxelEditorState.java @@ -597,6 +597,11 @@ public class VoxelEditorState extends BaseAppState { return (h & 0x7FFFFFFF) / (float) 0x7FFFFFFF; } + /** Gibt eine Momentaufnahme aller aktuell geladenen Chunks zurück (thread-safe). */ + public List getChunksSnapshot() { + return new java.util.ArrayList<>(chunks.values()); + } + /** * Speichert alle dirty Chunks synchron. * Kann von außen aufgerufen werden (z.B. beim globalen Speichern). @@ -2476,20 +2481,45 @@ public class VoxelEditorState extends BaseAppState { Float smoothH = smoothMap.get(hk0); if (h0 == null || smoothH == null) continue; + // Wichtig: colX ist chunk-global (cx*CELLS+bx), kein World-X. + // World-X = colX - 2048 (VoxelChunk.toWorldX-Konvention). + float th = terrainH((float)(colX - 2048), (float)(colZ - 2048)); + + // Pre-Scan: hat diese Spalte einen echten Tunnel? + // (negative Zelle auf/über Terrain-Höhe mit festem Voxel darüber) + // Tunnel-Spalten bekommen gar keinen positiven Gradienten in + // negative Zellen – weder Tunnel-Void noch Unter-Terrain-Cells – + // damit kein Plateau auf dem Tunnelboden entsteht. + boolean hasTunnelVoid = false; + outer: + for (int ly = 0; ly < blurN; ly++) { + if ((wiyBase + ly) >= th + && origChunk.getDensity(bx, ly, bz) < 0) { + for (int ly2 = ly + 1; ly2 < blurN; ly2++) { + if (origChunk.getDensity(bx, ly2, bz) > 0) { + hasTunnelVoid = true; break outer; + } + } + } + } + // Sub-voxel-genauen Dichte-Gradienten schreiben, damit MC die // Isofläche auf die exakte smoothH-Höhe interpoliert. - // Ausnahme: manuell ausgegrabene Voxel (Tunnel/Höhlen) behalten - // ihren MIN_VALUE – erkennbar daran dass Gradient solid will (d>0) - // aber die Original-Dichte bereits Luft ist (MIN_VALUE). for (int by = 0; by < blurN; by++) { - float d = (smoothH - (wiyBase + by)) * 127f; - // Tunnel/Höhlen-Voxel schützen: Gradient will Solid (d>0), - // aber der Voxel wurde ausgegraben (Dichte negativ) → - // nicht mit Solid-Gradient überschreiben. - // Gilt sowohl für Byte.MIN_VALUE (setDensity) als auch für - // partiell-reduzierte Werte (reduceDensity im Cave-Modus). + float worldY = wiyBase + by; + float d = (smoothH - worldY) * 127f; if (d > 0f && origChunk.getDensity(bx, by, bz) < 0) { - continue; + if (hasTunnelVoid) continue; // Tunnel-Spalte: alle negativen Zellen schützen + if (worldY >= th) { + // Über Terrain, kein Tunnel-Flag → offene Höhle prüfen + boolean solidAbove = false; + for (int ly = by + 1; ly < blurN; ly++) { + if (origChunk.getDensity(bx, ly, bz) > 0) { + solidAbove = true; break; + } + } + if (solidAbove) continue; + } } next[c.idx(bx, by, bz)] = Math.max(-128f, Math.min(127f, d)); } @@ -2604,6 +2634,15 @@ public class VoxelEditorState extends BaseAppState { } if (hasVoid) continue; + // Tunnel-Check: gibt es negative (leere) Zellen UNTERHALB von yBot? + // Das passiert bei Tunneln/Höhlen, deren Decke yBot ist, aber das + // Innere darunter liegt. Extrapolation würde den Hohlraum zuschütten. + boolean hasVoidBelow = false; + for (int ly = 0; ly < yBot; ly++) { + if (blurred.getDensity(lx, ly, lz) < 0) { hasVoidBelow = true; break; } + } + if (hasVoidBelow) continue; + // Steigung aus den zwei Voxeln darüber bestimmen. // slope < 0: Dichte nimmt nach unten ab (typisch für eine Oberfläche). float d1 = blurred.getDensity(lx, yBot + 1, lz); diff --git a/blight-map/src/main/map/chunks/voxel_16_0_08_baked_lod0.j3o b/blight-map/src/main/map/chunks/voxel_16_0_08_baked_lod0.j3o index b58dfa3..58b5622 100644 Binary files a/blight-map/src/main/map/chunks/voxel_16_0_08_baked_lod0.j3o and b/blight-map/src/main/map/chunks/voxel_16_0_08_baked_lod0.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_16_0_08_baked_lod1.j3o b/blight-map/src/main/map/chunks/voxel_16_0_08_baked_lod1.j3o index 8b89a9c..8e897da 100644 Binary files a/blight-map/src/main/map/chunks/voxel_16_0_08_baked_lod1.j3o and b/blight-map/src/main/map/chunks/voxel_16_0_08_baked_lod1.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_16_0_08_baked_lod2.j3o b/blight-map/src/main/map/chunks/voxel_16_0_08_baked_lod2.j3o deleted file mode 100644 index c48e0cf..0000000 Binary files a/blight-map/src/main/map/chunks/voxel_16_0_08_baked_lod2.j3o and /dev/null differ diff --git a/blight-map/src/main/map/chunks/voxel_16_m1_08_baked_lod0.j3o b/blight-map/src/main/map/chunks/voxel_16_m1_08_baked_lod0.j3o index eafde82..658b9af 100644 Binary files a/blight-map/src/main/map/chunks/voxel_16_m1_08_baked_lod0.j3o and b/blight-map/src/main/map/chunks/voxel_16_m1_08_baked_lod0.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_16_m1_08_baked_lod1.j3o b/blight-map/src/main/map/chunks/voxel_16_m1_08_baked_lod1.j3o index fdbcec2..07c071f 100644 Binary files a/blight-map/src/main/map/chunks/voxel_16_m1_08_baked_lod1.j3o and b/blight-map/src/main/map/chunks/voxel_16_m1_08_baked_lod1.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_16_m1_08_baked_lod2.j3o b/blight-map/src/main/map/chunks/voxel_16_m1_08_baked_lod2.j3o index 6ff23dc..d786551 100644 Binary files a/blight-map/src/main/map/chunks/voxel_16_m1_08_baked_lod2.j3o and b/blight-map/src/main/map/chunks/voxel_16_m1_08_baked_lod2.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_16_m1_09_baked_lod0.j3o b/blight-map/src/main/map/chunks/voxel_16_m1_09_baked_lod0.j3o index c85c312..428f4fe 100644 Binary files a/blight-map/src/main/map/chunks/voxel_16_m1_09_baked_lod0.j3o and b/blight-map/src/main/map/chunks/voxel_16_m1_09_baked_lod0.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_16_m1_09_baked_lod1.j3o b/blight-map/src/main/map/chunks/voxel_16_m1_09_baked_lod1.j3o index 1b2551a..bcc2b1d 100644 Binary files a/blight-map/src/main/map/chunks/voxel_16_m1_09_baked_lod1.j3o and b/blight-map/src/main/map/chunks/voxel_16_m1_09_baked_lod1.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_16_m1_09_baked_lod2.j3o b/blight-map/src/main/map/chunks/voxel_16_m1_09_baked_lod2.j3o index 6de632b..eec5772 100644 Binary files a/blight-map/src/main/map/chunks/voxel_16_m1_09_baked_lod2.j3o and b/blight-map/src/main/map/chunks/voxel_16_m1_09_baked_lod2.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_17_0_08_baked_lod0.j3o b/blight-map/src/main/map/chunks/voxel_17_0_08_baked_lod0.j3o index e3a387e..8ba2efc 100644 Binary files a/blight-map/src/main/map/chunks/voxel_17_0_08_baked_lod0.j3o and b/blight-map/src/main/map/chunks/voxel_17_0_08_baked_lod0.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_17_0_08_baked_lod1.j3o b/blight-map/src/main/map/chunks/voxel_17_0_08_baked_lod1.j3o index ebf455c..73bcc35 100644 Binary files a/blight-map/src/main/map/chunks/voxel_17_0_08_baked_lod1.j3o and b/blight-map/src/main/map/chunks/voxel_17_0_08_baked_lod1.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_17_0_08_baked_lod2.j3o b/blight-map/src/main/map/chunks/voxel_17_0_08_baked_lod2.j3o new file mode 100644 index 0000000..810bf77 Binary files /dev/null and b/blight-map/src/main/map/chunks/voxel_17_0_08_baked_lod2.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_17_0_09_baked_lod0.j3o b/blight-map/src/main/map/chunks/voxel_17_0_09_baked_lod0.j3o index 4dcba4e..5b4b39f 100644 Binary files a/blight-map/src/main/map/chunks/voxel_17_0_09_baked_lod0.j3o and b/blight-map/src/main/map/chunks/voxel_17_0_09_baked_lod0.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_17_0_09_baked_lod1.j3o b/blight-map/src/main/map/chunks/voxel_17_0_09_baked_lod1.j3o index d2b601f..d1884cd 100644 Binary files a/blight-map/src/main/map/chunks/voxel_17_0_09_baked_lod1.j3o and b/blight-map/src/main/map/chunks/voxel_17_0_09_baked_lod1.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_17_0_09_baked_lod2.j3o b/blight-map/src/main/map/chunks/voxel_17_0_09_baked_lod2.j3o index 6581f61..b64d792 100644 Binary files a/blight-map/src/main/map/chunks/voxel_17_0_09_baked_lod2.j3o and b/blight-map/src/main/map/chunks/voxel_17_0_09_baked_lod2.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_17_m1_08_baked_lod0.j3o b/blight-map/src/main/map/chunks/voxel_17_m1_08_baked_lod0.j3o index 0024b41..01698d1 100644 Binary files a/blight-map/src/main/map/chunks/voxel_17_m1_08_baked_lod0.j3o and b/blight-map/src/main/map/chunks/voxel_17_m1_08_baked_lod0.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_17_m1_08_baked_lod1.j3o b/blight-map/src/main/map/chunks/voxel_17_m1_08_baked_lod1.j3o index 2111f6f..b0746c2 100644 Binary files a/blight-map/src/main/map/chunks/voxel_17_m1_08_baked_lod1.j3o and b/blight-map/src/main/map/chunks/voxel_17_m1_08_baked_lod1.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_17_m1_08_baked_lod2.j3o b/blight-map/src/main/map/chunks/voxel_17_m1_08_baked_lod2.j3o index 4d58362..021caff 100644 Binary files a/blight-map/src/main/map/chunks/voxel_17_m1_08_baked_lod2.j3o and b/blight-map/src/main/map/chunks/voxel_17_m1_08_baked_lod2.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_17_m1_09_baked_lod0.j3o b/blight-map/src/main/map/chunks/voxel_17_m1_09_baked_lod0.j3o index 2df4c43..9ab1a87 100644 Binary files a/blight-map/src/main/map/chunks/voxel_17_m1_09_baked_lod0.j3o and b/blight-map/src/main/map/chunks/voxel_17_m1_09_baked_lod0.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_17_m1_09_baked_lod1.j3o b/blight-map/src/main/map/chunks/voxel_17_m1_09_baked_lod1.j3o index 1f332e5..4e2ac70 100644 Binary files a/blight-map/src/main/map/chunks/voxel_17_m1_09_baked_lod1.j3o and b/blight-map/src/main/map/chunks/voxel_17_m1_09_baked_lod1.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_17_m1_09_baked_lod2.j3o b/blight-map/src/main/map/chunks/voxel_17_m1_09_baked_lod2.j3o index b402817..7bcfde3 100644 Binary files a/blight-map/src/main/map/chunks/voxel_17_m1_09_baked_lod2.j3o and b/blight-map/src/main/map/chunks/voxel_17_m1_09_baked_lod2.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_18_0_08_baked_lod0.j3o b/blight-map/src/main/map/chunks/voxel_18_0_08_baked_lod0.j3o index c6aac14..8867391 100644 Binary files a/blight-map/src/main/map/chunks/voxel_18_0_08_baked_lod0.j3o and b/blight-map/src/main/map/chunks/voxel_18_0_08_baked_lod0.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_18_0_08_baked_lod1.j3o b/blight-map/src/main/map/chunks/voxel_18_0_08_baked_lod1.j3o index b471881..5c218cc 100644 Binary files a/blight-map/src/main/map/chunks/voxel_18_0_08_baked_lod1.j3o and b/blight-map/src/main/map/chunks/voxel_18_0_08_baked_lod1.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_18_0_08_baked_lod2.j3o b/blight-map/src/main/map/chunks/voxel_18_0_08_baked_lod2.j3o index 110d6e6..126a468 100644 Binary files a/blight-map/src/main/map/chunks/voxel_18_0_08_baked_lod2.j3o and b/blight-map/src/main/map/chunks/voxel_18_0_08_baked_lod2.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_18_0_09.blvc.prebake b/blight-map/src/main/map/chunks/voxel_18_0_09.blvc.prebake index 18785dd..c5ae7a7 100644 Binary files a/blight-map/src/main/map/chunks/voxel_18_0_09.blvc.prebake and b/blight-map/src/main/map/chunks/voxel_18_0_09.blvc.prebake differ diff --git a/blight-map/src/main/map/chunks/voxel_18_0_09_baked_lod0.j3o b/blight-map/src/main/map/chunks/voxel_18_0_09_baked_lod0.j3o index 0ad69d2..f117b04 100644 Binary files a/blight-map/src/main/map/chunks/voxel_18_0_09_baked_lod0.j3o and b/blight-map/src/main/map/chunks/voxel_18_0_09_baked_lod0.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_18_0_09_baked_lod1.j3o b/blight-map/src/main/map/chunks/voxel_18_0_09_baked_lod1.j3o index f402135..910b84c 100644 Binary files a/blight-map/src/main/map/chunks/voxel_18_0_09_baked_lod1.j3o and b/blight-map/src/main/map/chunks/voxel_18_0_09_baked_lod1.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_18_0_09_baked_lod2.j3o b/blight-map/src/main/map/chunks/voxel_18_0_09_baked_lod2.j3o index dfa0c39..6c44c9e 100644 Binary files a/blight-map/src/main/map/chunks/voxel_18_0_09_baked_lod2.j3o and b/blight-map/src/main/map/chunks/voxel_18_0_09_baked_lod2.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_18_0_10.blvc.prebake b/blight-map/src/main/map/chunks/voxel_18_0_10.blvc.prebake new file mode 100644 index 0000000..69a4444 Binary files /dev/null and b/blight-map/src/main/map/chunks/voxel_18_0_10.blvc.prebake differ diff --git a/blight-map/src/main/map/chunks/voxel_18_0_10_baked_lod0.j3o b/blight-map/src/main/map/chunks/voxel_18_0_10_baked_lod0.j3o new file mode 100644 index 0000000..a57069b Binary files /dev/null and b/blight-map/src/main/map/chunks/voxel_18_0_10_baked_lod0.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_18_0_10_baked_lod1.j3o b/blight-map/src/main/map/chunks/voxel_18_0_10_baked_lod1.j3o new file mode 100644 index 0000000..1e799b6 Binary files /dev/null and b/blight-map/src/main/map/chunks/voxel_18_0_10_baked_lod1.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_18_0_10_baked_lod2.j3o b/blight-map/src/main/map/chunks/voxel_18_0_10_baked_lod2.j3o new file mode 100644 index 0000000..6fed4a8 Binary files /dev/null and b/blight-map/src/main/map/chunks/voxel_18_0_10_baked_lod2.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_18_m1_08_baked_lod0.j3o b/blight-map/src/main/map/chunks/voxel_18_m1_08_baked_lod0.j3o index 667e65d..d170e15 100644 Binary files a/blight-map/src/main/map/chunks/voxel_18_m1_08_baked_lod0.j3o and b/blight-map/src/main/map/chunks/voxel_18_m1_08_baked_lod0.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_18_m1_08_baked_lod1.j3o b/blight-map/src/main/map/chunks/voxel_18_m1_08_baked_lod1.j3o index 1f7094e..d259aa4 100644 Binary files a/blight-map/src/main/map/chunks/voxel_18_m1_08_baked_lod1.j3o and b/blight-map/src/main/map/chunks/voxel_18_m1_08_baked_lod1.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_18_m1_08_baked_lod2.j3o b/blight-map/src/main/map/chunks/voxel_18_m1_08_baked_lod2.j3o index 3959f2d..f20c219 100644 Binary files a/blight-map/src/main/map/chunks/voxel_18_m1_08_baked_lod2.j3o and b/blight-map/src/main/map/chunks/voxel_18_m1_08_baked_lod2.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_18_m1_09.blvc b/blight-map/src/main/map/chunks/voxel_18_m1_09.blvc.prebake similarity index 71% rename from blight-map/src/main/map/chunks/voxel_18_m1_09.blvc rename to blight-map/src/main/map/chunks/voxel_18_m1_09.blvc.prebake index 632b745..54821e3 100644 Binary files a/blight-map/src/main/map/chunks/voxel_18_m1_09.blvc and b/blight-map/src/main/map/chunks/voxel_18_m1_09.blvc.prebake differ diff --git a/blight-map/src/main/map/chunks/voxel_18_m1_09_baked_lod0.j3o b/blight-map/src/main/map/chunks/voxel_18_m1_09_baked_lod0.j3o new file mode 100644 index 0000000..80629bc Binary files /dev/null and b/blight-map/src/main/map/chunks/voxel_18_m1_09_baked_lod0.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_18_m1_09_baked_lod1.j3o b/blight-map/src/main/map/chunks/voxel_18_m1_09_baked_lod1.j3o new file mode 100644 index 0000000..f9d2419 Binary files /dev/null and b/blight-map/src/main/map/chunks/voxel_18_m1_09_baked_lod1.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_18_m1_09_baked_lod2.j3o b/blight-map/src/main/map/chunks/voxel_18_m1_09_baked_lod2.j3o new file mode 100644 index 0000000..2d0ffc8 Binary files /dev/null and b/blight-map/src/main/map/chunks/voxel_18_m1_09_baked_lod2.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_18_m1_10.blvc.prebake b/blight-map/src/main/map/chunks/voxel_18_m1_10.blvc.prebake new file mode 100644 index 0000000..7721c15 Binary files /dev/null and b/blight-map/src/main/map/chunks/voxel_18_m1_10.blvc.prebake differ diff --git a/blight-map/src/main/map/chunks/voxel_18_m1_10_baked_lod0.j3o b/blight-map/src/main/map/chunks/voxel_18_m1_10_baked_lod0.j3o new file mode 100644 index 0000000..da71b85 Binary files /dev/null and b/blight-map/src/main/map/chunks/voxel_18_m1_10_baked_lod0.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_18_m1_10_baked_lod1.j3o b/blight-map/src/main/map/chunks/voxel_18_m1_10_baked_lod1.j3o new file mode 100644 index 0000000..45c251c Binary files /dev/null and b/blight-map/src/main/map/chunks/voxel_18_m1_10_baked_lod1.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_18_m1_10_baked_lod2.j3o b/blight-map/src/main/map/chunks/voxel_18_m1_10_baked_lod2.j3o new file mode 100644 index 0000000..8d23716 Binary files /dev/null and b/blight-map/src/main/map/chunks/voxel_18_m1_10_baked_lod2.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_19_0_09.blvc b/blight-map/src/main/map/chunks/voxel_19_0_09.blvc new file mode 100644 index 0000000..bc3ad39 Binary files /dev/null and b/blight-map/src/main/map/chunks/voxel_19_0_09.blvc differ diff --git a/blight-map/src/main/map/chunks/voxel_19_0_10.blvc b/blight-map/src/main/map/chunks/voxel_19_0_10.blvc new file mode 100644 index 0000000..482cbe2 Binary files /dev/null and b/blight-map/src/main/map/chunks/voxel_19_0_10.blvc differ diff --git a/blight-map/src/main/map/chunks/voxel_19_m1_09.blvc b/blight-map/src/main/map/chunks/voxel_19_m1_09.blvc new file mode 100644 index 0000000..db74274 Binary files /dev/null and b/blight-map/src/main/map/chunks/voxel_19_m1_09.blvc differ diff --git a/blight-map/src/main/map/chunks/voxel_19_m1_10.blvc b/blight-map/src/main/map/chunks/voxel_19_m1_10.blvc new file mode 100644 index 0000000..8e79674 Binary files /dev/null and b/blight-map/src/main/map/chunks/voxel_19_m1_10.blvc differ