Files
minecraft-cloneandClaude f009789c42 feat: shadows, baked vertex AO, post-processing + central config.js
Visuals:
- PCFSoftShadowMap (2048²), directional light follows player with a tight
  shadow frustum (SHADOW_AREA) for high texel density; opak blocks cast+receive,
  water receives.
- Baked vertex ambient occlusion ("smooth lighting"): per-vertex solid-neighbor
  lookup (0fps algorithm) written into a color attribute, with flip-triangulation
  to avoid brightness seams across quad diagonals.
- EffectComposer: RenderPass -> UnrealBloomPass (subtle) -> OutputPass with
  ACES filmic tone-mapping + sRGB. HalfFloat render target (anti-banding) + MSAA.

Controls:
- Sprint moved from Ctrl to Shift (Ctrl is problematic in browsers). Shift in
  fly mode still means "descend" (no conflict, sprint only applies when walking).

config.js:
- New central js/config.js for all tweakable values (world, performance,
  renderer/tone-mapping, sky & fog, camera, lighting, shadows, bloom, AO,
  player physics, mouse sensitivity, reach) with SHADOWS_ENABLED / BLOOM_ENABLED
  feature toggles. Structural engine constants stay in constants.js.
- SEA_LEVEL / WORLD_SEED moved constants.js -> config.js (consumers rewired).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-21 00:46:03 +02:00

31 lines
1.2 KiB
JavaScript

// Noise-Setup: verschiedene Noise-Funktionen fuer Terrain, Biome und Hoehlen
import { createNoise2D, createNoise3D } from 'simplex-noise';
import { WORLD_SEED } from './config.js';
import { mulberry32 } from './rng.js';
// Wir leiten mehrere unabhaengige Streams aus dem Seed ab, damit
// verschiedene Noise-Quellen (Hoehe, Temperatur, Hoehlen) nicht korrelieren.
const rngTerrain = mulberry32(WORLD_SEED);
const rngTemp = mulberry32(WORLD_SEED ^ 0x9e3779b9);
const rngHumid = mulberry32(WORLD_SEED ^ 0x85ebca6b);
const rngCave = mulberry32(WORLD_SEED ^ 0xc2b2ae35);
const rngDetail = mulberry32(WORLD_SEED ^ 0x27d4eb2f);
export const noise2DTerrain = createNoise2D(rngTerrain);
export const noise2DDetail = createNoise2D(rngDetail);
export const noise2DTemp = createNoise2D(rngTemp);
export const noise2DHumid = createNoise2D(rngHumid);
export const noise3DCave = createNoise3D(rngCave);
// Fraktale Brownian Motion (fbm) in 2D
export function fbm2(noiseFn, x, z, octaves, lacunarity, gain) {
let amp = 1, freq = 1, sum = 0, norm = 0;
for (let o = 0; o < octaves; o++) {
sum += amp * noiseFn(x * freq, z * freq);
norm += amp;
amp *= gain;
freq *= lacunarity;
}
return sum / norm; // [-1,1]
}