# Changelog

All notable changes to Skydrift are recorded here. Versions follow semver;
v1.x updates are free to v1 licensees.

## v1.1.0 — 2026-07-14

This release rebuilds the cloud shaping and lighting path, adds an independent
cirrus layer, and exposes the renderer's quality and atmosphere controls through
the public API.

### Cloud structure

- Fixed spherical-layer intersection for cameras below, inside, or above the
  cloud volume. Ground cameras now enter at the cloud base instead of wasting
  most of the march below it.
- Added large weather cells, authorable weather offsets, macro modulation,
  vertical development, wind shear, edge curl, precipitation loading, and
  localized cumulonimbus anvils.
- Rotated base and detail sampling away from the volume axes. The old analytic
  de-tiling warp remains available, but now defaults to zero because high values
  fold the density field into sheets.
- Added a separate high-altitude cirrus march with its own coverage, density,
  altitude, erosion, wind, and shear controls.
- Added the `mixed` preset for lower cumulus under a cirrus layer. There are now
  seven bundled presets.

### Lighting and atmosphere

- Recalibrated extinction against the physical march step length. Direct light
  now reaches cloud interiors instead of stopping at the first occupied sample.
- Added golden-angle cone shadows, three scattering orders, separate phase
  lobes, ambient occlusion, ground bounce, and rain-core absorption.
- Moved the analytic sun disc to the full-resolution composite. Low quality
  tiers keep a round solar edge while cloud transmittance still occludes it.
- Added runtime Rayleigh, Mie, ozone, ground-albedo, multi-scatter, sun-disc,
  sky-saturation, and sky-luminance controls.
- Fixed nested atmosphere integration loop indices. The broken indices had
  flattened the multiple-scatter LUT and washed out the sky.

### Temporal and quality controls

- Fixed vertically mirrored history reprojection and added wind-aware feature
  motion, opacity-reactive rejection, neighbourhood clipping, and explicit
  history invalidation.
- Added `performance`, `balanced`, `high`, `ultra`, and `cinematic` quality
  tiers. Custom step, light-step, cirrus-step, resolution, and feedback budgets
  are also accepted.
- Added a physical maximum step length and stratified per-interval jitter to
  remove shell contour bands at grazing angles.

### API and fallback

- Added `sky.cirrus`, `sky.quality`, cloud configuration helpers, wind direction
  and evolution controls, atmosphere profiles, preset transitions, and expanded
  settings/debug snapshots.
- Fixed backend detection when Three.js runs `WebGPURenderer` on WebGL2. The old
  probe incorrectly enabled WebGPU storage textures on the fallback backend.
- Added a deterministic CPU bake backed by `Data3DTexture` for WebGL2. WebGPU
  keeps the 128³ compute bake; WebGL2 defaults to a 64³ shape volume with the
  same packed Perlin and Worley FBM channels.
- Updated the TypeScript declarations to cover the full v1.1 public surface.

## v1.0 — 2026-06-16

First public release. A genuine physical sky with volumetric clouds, shipped as
readable zero-build ES modules (WebGPU/TSL with a WebGL2 fallback).

### Atmosphere

- **Physical Hillaire sky** — transmittance, multiple-scatter and sky-view LUTs
  baked on the GPU (Rayleigh + Mie + ozone, megametre units). The sun colour,
  ambient and horizon haze all fall out of the model rather than being painted,
  so the sky reddens at dawn/dusk and the cloud tops warm correctly.
- **Sun control** — `setSun(elevation, azimuth)` and a 24h time-of-day arc.

### Clouds

- **Nubis-style raymarcher** rendered as one half-resolution fullscreen pass:
  Perlin-Worley base shape eroded by Worley detail, a height/coverage gradient,
  dual-lobe Henyey-Greenstein phase, Beer-Lambert extinction, a 6-tap cone march
  to the sun for self-shadowing, and a multi-octave Beer-powder multiple-scatter
  approximation.
- **Temporal accumulation** — Halton jitter + variance-clamped reprojection
  converges the half-res march to a clean image and holds ~120 FPS.
- **God rays** — screen-space radial light scattering (Kenny Mitchell), run at
  half-res so it's nearly free.
- **Golden-hour warmth** — a sun-tint grade warms the sunlit cloud faces and the
  shafts while the physical sky stays its true blue.
- **Grounded horizon** — an angular ground gradient plus a distant rolling
  terrain silhouette so the scene reads as standing on the earth looking up.
- **Aerial-perspective haze** fades distant clouds into the sky.

### Presets

- Six tuned cloud types: `cumulus`, `sunpeek`, `stratocumulus`, `stratus`,
  `cumulonimbus`, `cirrus`.

### API

- **`Skydrift` façade** — `createSkydrift(ctx)` groups the runtime into named
  subsystems (`sky`, `clouds`, `lighting`, `ground`, `terrain`, `wind`) with
  chainable setters; `bootSkydrift(opts)` builds every piece for you.
  `loadPreset`, `getSettings` / `printSettings`, `getDebugData`, and the
  `update` / `render` / `setSize` / `dispose` loop helpers.

### Performance

- Adaptive guardrail: sustained sub-30 FPS backs off the cloud resolution rather
  than choking the GPU. Safe default is 64 steps at half-res with strong
  empty-space skipping.
