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>
31 lines
1.2 KiB
JavaScript
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]
|
|
}
|