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 bb6e128..929705f 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 @@ -2478,6 +2478,41 @@ public class VoxelEditorState extends BaseAppState { } } + // ── Schritt 2c: Höhenfeld-Glättung ────────────────────────────────── + // Schritt 2 (Waypoint-Interpolation) erzeugt an Stufen-Übergängen periodische + // Höhenoszillationen: für eine Treppe 2,2,3,3,4,4 entstehen statt der idealen + // 3, 3.5, 4, 4.5 die Werte 3.33, 3.67, 4.33, 4.67 — ein kleiner "Hügel" pro + // Treppenstufe. Ursache: die Formel (h0·dUp + hUp·dDown)/(dUp+dDown) verwendet + // h0 (aktuelle Rohhöhe) statt die ideale lineare Interpolation zwischen den + // Ankerhöhen, was bei Zellen INNERHALB einer Stufe (mehrere Zellen gleicher + // Höhe) unterschiedliche Ergebnisse je nach Position produziert. + // Fix: 4 Passes eines XZ-Nachbarschafts-Mittelwerts glätten die Oszillationen + // auf <0.05 m heraus (jeder Pass halbiert die Amplitude, bei 4 Passes fast + // unsichtbar). Cliff-Schutz: keine Mittelung über Höhenunterschiede > 1.5 m. + { + final int HF_PASSES = 4; + final float HF_CLIFF_THR = 1.5f; + final long DX = 60001L; // X-Nachbar-Offset im hk-Schema + for (int pass = 0; pass < HF_PASSES; pass++) { + Map next = new HashMap<>(smoothMap.size()); + for (Map.Entry e : smoothMap.entrySet()) { + long hk = e.getKey(); + float sh = e.getValue(); + float sum = sh; + int cnt = 1; + for (long delta : new long[]{ DX, -DX, 1L, -1L }) { + Float nb = smoothMap.get(hk + delta); + if (nb != null && Math.abs(nb - sh) <= HF_CLIFF_THR) { + sum += nb; + cnt++; + } + } + next.put(hk, sum / cnt); + } + smoothMap = next; + } + } + // ── Schritt 3: Dichte anpassen ──────────────────────────────────── // ALLE Spalten aus hfMap bekommen den Dichte-Gradienten geschrieben, auch // Plateau-Spalten (smoothH==h0), nicht nur echte Rampen. Grund (gefunden 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 32ada0b..a1576af 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 081cd50..ecb8051 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_15_baked_lod0.j3o b/blight-map/src/main/map/chunks/voxel_16_0_15_baked_lod0.j3o deleted file mode 100644 index f25f579..0000000 Binary files a/blight-map/src/main/map/chunks/voxel_16_0_15_baked_lod0.j3o and /dev/null differ diff --git a/blight-map/src/main/map/chunks/voxel_16_0_15_baked_lod1.j3o b/blight-map/src/main/map/chunks/voxel_16_0_15_baked_lod1.j3o deleted file mode 100644 index 88edf89..0000000 Binary files a/blight-map/src/main/map/chunks/voxel_16_0_15_baked_lod1.j3o and /dev/null differ diff --git a/blight-map/src/main/map/chunks/voxel_16_0_16.blvc b/blight-map/src/main/map/chunks/voxel_16_0_16.blvc index 0603c92..ee2d678 100644 Binary files a/blight-map/src/main/map/chunks/voxel_16_0_16.blvc and b/blight-map/src/main/map/chunks/voxel_16_0_16.blvc differ diff --git a/blight-map/src/main/map/chunks/voxel_16_0_16_baked_lod0.j3o b/blight-map/src/main/map/chunks/voxel_16_0_16_baked_lod0.j3o index 97570c2..fbf7d41 100644 Binary files a/blight-map/src/main/map/chunks/voxel_16_0_16_baked_lod0.j3o and b/blight-map/src/main/map/chunks/voxel_16_0_16_baked_lod0.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_16_0_16_baked_lod1.j3o b/blight-map/src/main/map/chunks/voxel_16_0_16_baked_lod1.j3o index 8907326..1b0751e 100644 Binary files a/blight-map/src/main/map/chunks/voxel_16_0_16_baked_lod1.j3o and b/blight-map/src/main/map/chunks/voxel_16_0_16_baked_lod1.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_16_0_16_baked_lod2.j3o b/blight-map/src/main/map/chunks/voxel_16_0_16_baked_lod2.j3o index deb420f..7996347 100644 Binary files a/blight-map/src/main/map/chunks/voxel_16_0_16_baked_lod2.j3o and b/blight-map/src/main/map/chunks/voxel_16_0_16_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 11826f8..a5185a5 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 c4a6d11..fa22f64 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_10_baked_lod0.j3o b/blight-map/src/main/map/chunks/voxel_17_0_10_baked_lod0.j3o index 1e7fc95..f7c8edd 100644 Binary files a/blight-map/src/main/map/chunks/voxel_17_0_10_baked_lod0.j3o and b/blight-map/src/main/map/chunks/voxel_17_0_10_baked_lod0.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_17_0_10_baked_lod1.j3o b/blight-map/src/main/map/chunks/voxel_17_0_10_baked_lod1.j3o index 193bb5d..c7312f9 100644 Binary files a/blight-map/src/main/map/chunks/voxel_17_0_10_baked_lod1.j3o and b/blight-map/src/main/map/chunks/voxel_17_0_10_baked_lod1.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_17_0_15_baked_lod0.j3o b/blight-map/src/main/map/chunks/voxel_17_0_15_baked_lod0.j3o index 2df4c86..428fc7a 100644 Binary files a/blight-map/src/main/map/chunks/voxel_17_0_15_baked_lod0.j3o and b/blight-map/src/main/map/chunks/voxel_17_0_15_baked_lod0.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_17_0_15_baked_lod1.j3o b/blight-map/src/main/map/chunks/voxel_17_0_15_baked_lod1.j3o index c1bb60c..a232288 100644 Binary files a/blight-map/src/main/map/chunks/voxel_17_0_15_baked_lod1.j3o and b/blight-map/src/main/map/chunks/voxel_17_0_15_baked_lod1.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_17_0_16.blvc b/blight-map/src/main/map/chunks/voxel_17_0_16.blvc index 8fa4f38..f1c8972 100644 Binary files a/blight-map/src/main/map/chunks/voxel_17_0_16.blvc and b/blight-map/src/main/map/chunks/voxel_17_0_16.blvc differ diff --git a/blight-map/src/main/map/chunks/voxel_17_0_16_baked_lod0.j3o b/blight-map/src/main/map/chunks/voxel_17_0_16_baked_lod0.j3o index 3c1c715..28163e6 100644 Binary files a/blight-map/src/main/map/chunks/voxel_17_0_16_baked_lod0.j3o and b/blight-map/src/main/map/chunks/voxel_17_0_16_baked_lod0.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_17_0_16_baked_lod1.j3o b/blight-map/src/main/map/chunks/voxel_17_0_16_baked_lod1.j3o index 547c248..b264b51 100644 Binary files a/blight-map/src/main/map/chunks/voxel_17_0_16_baked_lod1.j3o and b/blight-map/src/main/map/chunks/voxel_17_0_16_baked_lod1.j3o differ diff --git a/blight-map/src/main/map/chunks/voxel_17_0_16_baked_lod2.j3o b/blight-map/src/main/map/chunks/voxel_17_0_16_baked_lod2.j3o index a3d3bab..959bb5c 100644 Binary files a/blight-map/src/main/map/chunks/voxel_17_0_16_baked_lod2.j3o and b/blight-map/src/main/map/chunks/voxel_17_0_16_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 44c36e7..4dec45d 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 72a9965..27b7a25 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 c882945..cca5e70 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_baked_lod0.j3o b/blight-map/src/main/map/chunks/voxel_18_0_09_baked_lod0.j3o index c54b2f5..9311625 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 03d6460..428740d 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_10_baked_lod0.j3o b/blight-map/src/main/map/chunks/voxel_18_0_10_baked_lod0.j3o index 4521d10..11b35f6 100644 Binary files a/blight-map/src/main/map/chunks/voxel_18_0_10_baked_lod0.j3o 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 index 4f7f63d..b385df5 100644 Binary files a/blight-map/src/main/map/chunks/voxel_18_0_10_baked_lod1.j3o and b/blight-map/src/main/map/chunks/voxel_18_0_10_baked_lod1.j3o differ