An authored outdoor area can carry rain or snow. Its seed, intensity, wind, volume and time anchor are saved with the world, so travelers see the same pattern at the same room time. Weather is cosmetic: it does not change collision, movement, inventory or simulation state.
#Try it
Stop the existing editor with Ctrl+C in its terminal, run npm run dev:editor, and open the printed private link. The launcher reuses an already-running editor, so stopping it first is necessary to load the new server code. Choose an outdoor place, then Atmosphere → Rain & snow → Add weather to this place. Pick rain or snow, set intensity and wind, and position the outdoor area. Area reach is the distance from its center to each edge; set the lower edge at ground level and keep the volume outside roofs. Preview, Save, then Apply to share it. Publish retains its configuration and epoch.
The preview animates the pattern. Cancel leaves the saved world intact; Discard removes an unsaved preview. Saved Undo/Redo survives reload. Disabling weather removes precipitation without changing the underlying atmosphere or day/night settings. Mood buttons change the lighting and retain weather, allowing combinations such as rain at sunset or snow by moonlight. Reopening unchanged controls preserves the epoch; changing the settings anchors a new pattern at Preview.
#Contract
World format 21, compiler weather-world.21, introduces optional place.weather:
weather: {
profile: 'precipitation.1',
kind: 'rain',
seed: 42,
intensity: 0.7,
position: [0, 4, 0],
bounds: [6, 4, 6],
wind: [0.5, -0.2],
epochSeconds: 1800000000,
}position is the volume center in world metres; bounds are its half sizes, each 0.5–100 metres. wind gives X/Z velocity in metres per second, each −10–10. Intensity is 0–1, seed an unsigned 32-bit integer, and epoch finite UTC seconds in 0–1e12. The reader owns arrays and rejects unknown fields and nonfinite values. set-weather accepts this value or null through ordinary transactions, conflict protection and durable history. Object arrangements omit surrounding weather. Day/night and terrain operations preserve the newer world format. Older source and presentation profiles reject weather fields.
Presentation format 14 carries this small configuration. Cooperative and PostgreSQL room hosts send the existing environment-time scalar when either weather or day/night is present; a weather-only world does not need a daylight cycle. That clock uses authority epochs, monotonic receipt extrapolation capped at one second, and a held value while disconnected. Shared time reaches main-thread and Worker graphics and portal destinations through the existing view channel. The scalar travels with an absolute monotonic sample timestamp and expiry deadline; renderers use only the receipt’s remaining prediction budget. Handoffs never start a fresh second of extrapolation. A monotonic view holds its phase on pause or expiry without rewinding. Offline play uses local wall time. Day/night and weather do not send regenerated particle arrays over the network.
WeatherPool samples directly into one reusable Float32 array. Rain uses a four-second descent; snow uses twelve seconds. Seeded start phases spread the volume evenly. Snow also has gentle seeded sideways drift. Wind moves each drop during its descent, horizontal coordinates wrap at the volume edges, and opacity fades at the upper and lower edges. The pattern repeats exactly after 120 seconds, including negative offsets relative to its epoch. There is no accumulated integration drift or per-drop simulation entity. Quality levels retain a stable prefix of the seeded pattern.
#Rendering and budgets
The independent weather pool draws at most 2048 / 1024 / 512 drops or flakes at high / balanced / performance quality, further limited by intensity. It does not consume decorative emitter or actor slots. One optional 96 KiB GPU instance buffer and one premultiplied-alpha draw serve the whole place; no weather textures, shadows or frame targets are added. Removing weather or setting zero intensity releases the buffer. Teardown and device reconstruction follow the renderer lifecycle.
Rain uses narrow, wind-aligned streaks; snow uses soft camera-facing flakes. Broad lighting and fog attenuate them, and nearby precipitation fades before it can obscure the camera. Existing depth and portal clipping hide precipitation behind opaque surfaces. Reduced motion freezes the pattern at its saved starting phase while shared daylight continues. Resource usage is bounded by the pool, independent of session length or authored volume size.
#Limits
An outdoor volume is explicitly authored. This profile does not detect shelter, stop drops at geometry, accumulate snow, wet surfaces, play weather audio, or affect gameplay. Depth occlusion hides particles behind visible geometry; it is not roof collision. Keep weather volumes clear of covered interiors. Large regions use the same particle cap, so they look sparser.
Rain/snow-to-clear cycles are supported below. Changes between precipitation kinds, layered moving clouds, storms, lightning, temperature and seasonal changes remain open. This is precipitation authoring, not completion of the full weather/environment milestone. Physical-device, long-session, WAN latency and cross-host UTC accuracy qualification remain open, as do final character and environment art.
Acceptance evidence records exact seeded sampling, saved history, room restart checks, main/Worker images, portal timing, resource bounds, shared publication and retained failures.
#Saved clear spells and showers — October 27
In Atmosphere → Rain & snow, enable Alternate clear spells and showers. Choose the clear duration, wet duration and fade duration (seconds), then Preview, Save and Apply. For a quick test use 4 / 4 / 2; the cycle repeats every twelve seconds. Use longer intervals for a natural setting. Publish creates a pinned release containing the same schedule. Existing constant-weather worlds keep their original profile and behavior.
World format 70, compiler weather-cycle-world.70, admits
precipitation.2 with cycle: {clearSeconds, wetSeconds, transitionSeconds}.
The clear and wet intervals are each at least one second; fades are 1–600 seconds;
the entire period is at most 24 hours. The saved epoch starts the clear interval,
followed by a smooth fade to the authored intensity, the wet interval and a fade
back to clear. Changing settings establishes a new epoch; reopening unchanged
controls preserves it. Undo/redo restores the exact prior schedule and epoch.
Older world formats reject the new profile rather than silently rendering constant
rain.
Sampling derives the phase directly from the existing authoritative environment clock, including dates before the epoch, late joins and room restarts. Both graphics placements use the same sampler. No per-tick weather messages, simulation entities or accumulated emitter state are added. The fixed particle pool, quality caps and storage limits remain unchanged. The last particle fades fractionally as the density changes; clear intervals issue no weather draw. Once allocated, the single buffer is retained across clear spells to avoid repeated allocation. Reduced motion freezes the weather at its saved initial phase, which is clear for this profile; it does not stop the shared daylight clock.
Focused acceptance: eight native schema/sampling/compiler/checkpoint/history and legacy-weather checks pass. Two real cooperative-room cases pass constant and cycling weather through host change, restart and late join. The physical Intel WebGPU browser journey passes in 27 seconds: authoring controls, save/reopen without epoch reset, Apply, Worker/main graphics, two travelers (one with a browser clock skewed by a day), and clear → rain → clear. The shared shower and controls were visually reviewed.
Review later: cycle-specific PostgreSQL/hosted restart, WAN/device qualification, long sessions and rain/snow transitions. The two existing PostgreSQL weather cases were skipped in this run; they are not acceptance evidence for cycles. This adds timed precipitation, not roof detection, wet surfaces or completion of the entire environmental-systems milestone. Final art approval remains open.