# Millbrook Pond

A little living countryside diorama, made entirely in code with Three.js. No models, image textures, or HDRIs are downloaded.

## Open

Serve this folder with any static server, for example `python3 -m http.server 8000`, then open `http://localhost:8000`. There is no build step. An internet connection is needed for the pinned Three.js CDN modules.

## Controls

- Drag with a mouse or one finger to orbit.
- Scroll or pinch with two fingers to zoom.
- Click or tap the water to send out a ripple.
- Use **Pause orbit** to stop the automatic camera movement; manual exploration still works.
- Use the time-of-day control to switch between **Afternoon** and **Golden hour**.
- Keyboard: **Space** pauses the orbit; **T** changes the time of day; **R** restores the starting view.

## Capture

Open `index.html?capture=1` through the same server. All interface elements disappear and a repeating, twelve-second camera choreography takes over. The camera and ambient animation return to their starting state every twelve seconds. Capture mode uses a fixed landscape-friendly composition and ignores pointer controls.

Append `&time=golden` for a golden-hour recording. Add `&t=0` (or another time in seconds) to freeze the choreography for a still image. Capture playback starts only once the scene and render targets are ready. The `pond-ready` event and `window.millbrook` provide the playback timing for automated recording.

## Rendering

The pond uses separate planar reflection and depth-equipped refraction render targets, procedural normal maps, depth-based water absorption, Fresnel reflection, and analytic expanding ripple rings. All geometry and textures are generated at runtime. Static scenery is batched, render resolution adapts to sustained frame rate, and mobile devices use smaller reflection maps and shadow maps.
