Weather: show multiple parcels' weather at once (snow, rain, buildup and sound in the right places) #931

Open
opened 2026-10-21 23:08:34 +00:00 by sky_line · 0 comments
Owner

Part of the weather system (#783), building on parcel weather (the [slwx …] parcel tag), #895 (region crossings) and the region weather source.

Today

Weather is one global state: the parcel (or region) the agent stands in decides what falls everywhere around the camera. Standing at a parcel border, the neighbouring parcel's own weather is ignored. Crossing the border switches all weather at once (fade or blend), and lying snow is applied as one global amount. Different weather side by side can't be shown, for example a snowy winter parcel next to a rainy or clear one.

Goal

Each parcel's weather applies where that parcel is. The precipitation, its lying snow and wetness, its sounds and its wind show in the right places, at the same time, within view range.

Proposal

  • Weather field around the camera. Build a 2D map, covering the weather maps' extent around the camera, of the effective weather per area:
    • rain or snow type, intensity, wind direction and speed, storm, accumulation settings.
    • Sample it from the parcel layout (the parcel overlay the viewer already receives) plus each parcel's weather tag. Parcels without a tag fall back to region weather, then to the user's local setting (unchanged precedence).
    • Resolution: parcel granularity (4 m) is enough. Soften borders over a few metres so rain doesn't stop on a knife edge, unless a hard edge is wanted (a "dome" or indoor winter scene); consider a per-parcel flag.
  • Parcel tags for parcels the agent isn't standing in. Fetch the weather tags of nearby visible parcels as well, not only the current one. Check how parcel descriptions can be fetched for neighbours (ParcelPropertiesRequest by area, or the existing parcel info requests), and cache them per region with refresh and expiry. Keep request volume bounded and polite to the simulator.
  • Particles: each drop's type and intensity come from the field at its position. Rain and snow can fall side by side; density follows intensity. Drops crossing a border fade or convert rather than pop.
  • Lying snow and wetness: the snow grid and ring accumulate or melt per texel from the field. Snow builds up on the snowy parcel while the rainy neighbour stays bare and wet, and melts if it's warm or raining. Wetness likewise. Global "cover" values become per-texel or per-area.
  • Wind: per-area wind for the drop tilt and the gusts. Blend at borders.
  • Sounds: weather audio blends by what's actually around the listener (the existing opening measurement plus the field). Standing at a border you hear both.
  • Avatars: per-avatar wetness and snow use the field at the avatar's position.
  • Region crossings / #895: with the field, crossing a border is just moving through the field. No switch, fade or keep logic is needed for neighbouring parcels and regions that are already loaded.
  • Performance: the field is a small texture updated when parcels or tags change, not every frame. The particle, snow and wetness passes add one texture lookup.
  • Settings:
    • a master toggle for per-parcel weather display (off = today's behaviour: the agent's parcel decides);
    • a cap on how far neighbouring parcels are honoured.

Test

  • Two adjacent parcels: one tagged heavy snow, the other rain.
    • Standing on the border: snow falls on one side and rain on the other, with a soft blend.
    • Snow builds up only on the snowy parcel, and the rainy one stays wet.
  • A tagged parcel in the middle of a clear region: weather visible from outside, approaching on foot.
  • Region border with different weather on each side.
  • Local weather on: overrides everything, as today.
Part of the weather system (#783), building on parcel weather (the `[slwx …]` parcel tag), #895 (region crossings) and the region weather source. ## Today Weather is one global state: the parcel (or region) the agent stands in decides what falls everywhere around the camera. Standing at a parcel border, the neighbouring parcel's own weather is ignored. Crossing the border switches all weather at once (fade or blend), and lying snow is applied as one global amount. Different weather side by side can't be shown, for example a snowy winter parcel next to a rainy or clear one. ## Goal Each parcel's weather applies where that parcel is. The precipitation, its lying snow and wetness, its sounds and its wind show in the right places, at the same time, within view range. ## Proposal - **Weather field around the camera.** Build a 2D map, covering the weather maps' extent around the camera, of the effective weather per area: - rain or snow type, intensity, wind direction and speed, storm, accumulation settings. - Sample it from the parcel layout (the parcel overlay the viewer already receives) plus each parcel's weather tag. Parcels without a tag fall back to region weather, then to the user's local setting (unchanged precedence). - Resolution: parcel granularity (4 m) is enough. Soften borders over a few metres so rain doesn't stop on a knife edge, unless a hard edge is wanted (a "dome" or indoor winter scene); consider a per-parcel flag. - **Parcel tags for parcels the agent isn't standing in.** Fetch the weather tags of nearby visible parcels as well, not only the current one. Check how parcel descriptions can be fetched for neighbours (`ParcelPropertiesRequest` by area, or the existing parcel info requests), and cache them per region with refresh and expiry. Keep request volume bounded and polite to the simulator. - **Particles:** each drop's type and intensity come from the field at its position. Rain and snow can fall side by side; density follows intensity. Drops crossing a border fade or convert rather than pop. - **Lying snow and wetness:** the snow grid and ring accumulate or melt per texel from the field. Snow builds up on the snowy parcel while the rainy neighbour stays bare and wet, and melts if it's warm or raining. Wetness likewise. Global "cover" values become per-texel or per-area. - **Wind:** per-area wind for the drop tilt and the gusts. Blend at borders. - **Sounds:** weather audio blends by what's actually around the listener (the existing opening measurement plus the field). Standing at a border you hear both. - **Avatars:** per-avatar wetness and snow use the field at the avatar's position. - **Region crossings / #895:** with the field, crossing a border is just moving through the field. No switch, fade or keep logic is needed for neighbouring parcels and regions that are already loaded. - **Performance:** the field is a small texture updated when parcels or tags change, not every frame. The particle, snow and wetness passes add one texture lookup. - **Settings:** - a master toggle for per-parcel weather display (off = today's behaviour: the agent's parcel decides); - a cap on how far neighbouring parcels are honoured. ## Test - Two adjacent parcels: one tagged heavy snow, the other rain. - Standing on the border: snow falls on one side and rain on the other, with a soft blend. - Snow builds up only on the snowy parcel, and the rainy one stays wet. - A tagged parcel in the middle of a clear region: weather visible from outside, approaching on foot. - Region border with different weather on each side. - Local weather on: overrides everything, as today.
sky_line added this to the Slipstream project 2026-10-21 23:08:34 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sky_line/Slipstream#931
No description provided.