From 21cc33e36b8c4e05beb7ffcda7ce3a56fc5cf775 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sun, 19 Apr 2026 14:10:46 +0200 Subject: [PATCH] Klima 3D: Wolken kleiner + deutlich mehr Variation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - makeCloud: Opacity pro Wolke gewürfelt (0.45..0.80), Bump-Anzahl 2..6 statt 3..5, Bump-Radien 0.45..1.15 statt 0.9..1.8 (halb so groß). Spacing zwischen Bumps variiert stärker. - 5 Wolken-Instanzen (vorher 4), Parameter-Ranges breiter: - Höhe 5..9 (vorher 6.5..8.3) - Scale 0.35..0.85 (vorher 0.75..1.20) — kleiner + mehr Streuung - Speed 0.5..1.9 (vorher 0.8..1.4) - Z-Start 2..12, Z-End -14..-22 (stärker versetzt) Fühlt sich jetzt mehr wie natürliche Dunst-Schwaden an, weniger synchron. Co-Authored-By: Claude Opus 4.7 (1M context) --- App/sims/klima/game-3d.html | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/App/sims/klima/game-3d.html b/App/sims/klima/game-3d.html index c3d7407..7618698 100644 --- a/App/sims/klima/game-3d.html +++ b/App/sims/klima/game-3d.html @@ -4304,16 +4304,20 @@ function syncCitizenBeach() { // pro Wolke eigener Zyklus und eigenes Höhenlevel. function makeCloud() { const g = new THREE.Group(); + // Transparenz pro Wolke leicht würfeln — manche sind dichter, andere + // dünner Dunst. Opacity zwischen 0.45 und 0.80. + const opacity = 0.45 + Math.random() * 0.35; const mat = new THREE.MeshBasicMaterial({ - color: 0xffffff, transparent: true, opacity: 0.72, depthWrite: false + color: 0xffffff, transparent: true, opacity, depthWrite: false }); - // Drei bis fünf gestapelte Kugeln für Dunst-Silhouette - const bumps = 3 + Math.floor(Math.random() * 3); + // 2..6 gestapelte Kugeln, Radien 0.45..1.15 — Silhouetten deutlich + // unterschiedlicher als vorher (kleine Wölkchen bis dickere Bänke). + const bumps = 2 + Math.floor(Math.random() * 5); for (let i = 0; i < bumps; i++) { - const r = 0.9 + Math.random() * 0.9; - const sphere = new THREE.Mesh(new THREE.SphereGeometry(r, 8, 6), mat); + const r = 0.45 + Math.random() * 0.70; + const sphere = new THREE.Mesh(new THREE.SphereGeometry(r, 7, 5), mat); sphere.position.set( - (i - bumps / 2) * 1.1 + (Math.random() - 0.5) * 0.4, + (i - bumps / 2) * (0.85 + Math.random() * 0.45) + (Math.random() - 0.5) * 0.4, (Math.random() - 0.5) * 0.4, (Math.random() - 0.5) * 0.4 ); @@ -4325,17 +4329,17 @@ function makeCloud() { // Vier Wolken, jede mit eigener Phase, Höhe und Flugdauer. const CLOUD_CYCLE = 60; // Sekunden pro Überquerung (Basis) const clouds = []; -for (let i = 0; i < 4; i++) { +// 5 Wolken mit breit gestreuten Parametern (Höhe, Skalierung, Tempo, +// Flugbahn). Höhe nah an Vulkan-Gletscher (~7.3), Skalierung insgesamt +// kleiner als vorher — jetzt 0.35..0.85 statt 0.75..1.20. +for (let i = 0; i < 5; i++) { const c = makeCloud(); - c.userData.phase = Math.random(); // 0..1 Startverschiebung - // Höhe nahe Vulkan-Spitze (Terrain ≈ 5.2 + Dome 2.1 ≈ 7.3) — Wolken - // ziehen knapp über die Gletscherkuppe, statt hoch am Himmel zu - // schweben. Fühlbarer "Dunst um den Vulkan"-Look. - c.userData.height = 6.5 + Math.random() * 1.8; - c.userData.zStart = 4 + Math.random() * 6; // Insel-Vorder-Bereich - c.userData.zEnd = -16 - Math.random() * 4; // hinterm Vulkan - c.userData.scale = 0.75 + Math.random() * 0.45; - c.userData.speed = 0.8 + Math.random() * 0.6; + c.userData.phase = Math.random(); + c.userData.height = 5.0 + Math.random() * 4.0; // 5..9 + c.userData.zStart = 2 + Math.random() * 10; // 2..12 + c.userData.zEnd = -14 - Math.random() * 8; // -14..-22 + c.userData.scale = 0.35 + Math.random() * 0.50; // 0.35..0.85 + c.userData.speed = 0.5 + Math.random() * 1.4; // 0.5..1.9 c.scale.setScalar(c.userData.scale); ambientGroup.add(c); clouds.push(c);