Blustery and chillier today and tomorrow with showers or longer spells of rain. Drier by midweek.
It's no secret that our old weather system was a huge mess of programmer art and performance issues, which is why it had to be removed from the game a long time ago. We were able to resolve the performance issues by doing more optimizations ourselves and relying less on Unity's particle system optimizations. We sort of rolled our own super primitive voxel collision to handle the coarse, large-scale collisions. Unity then only has to sort out the detailed collision on the last couple of meters above ground.
As for visuals, I think we did it right this time by having a system that is almost entirely artist-driven. The code then simply blends between various weather presets. This also has the advantage that everything can be adjusted by server mods, allowing for endless customization in the future.
Here's a short explanation of the main weather convars for server owners:
- weather.load loads a specific weather type
- weather.reset resets to dynamic weather
- weather.report prints the current dynamic weather
There are currently the following weather types that can be loaded this way:
In terms of affecting gameplay, server owners can also adjust how wet players get from rain and snow:
When using the normal dynamic weather, server owners can adjust the probability of every weather type individually:
If all of that still isn't enough customization for your particular server, then you can also adjust every individual parameter of the weather system. Note that negative values (-1) indicate that the value isn't overwritten and is using whatever the dynamic weather system is currently outputting.
- weather.rain How much it should rain
- weather.wind How much wind there is (mostly visual, affects certain vegetation)
- weather.thunder How much thunder / lightning there is
- weather.rainbow Can be set to forcefully trigger a rainbow
- weather.fog How much fog there is
- weather.atmosphere_rayleigh Rayleigh scattering intensity (determines the color of the sky - it's complicated, just play around with it)
- weather.atmosphere_mie Mie scattering intensity (determines the color of the sky - it's complicated, just play around with it)
- weather.atmosphere_brightness Overall brightness of the sky
- weather.atmosphere_contrast Overall contrast of the sky
- weather.atmosphere_directionality Directionality factor that determines the size of the glow around the sun
- weather.cloud_size Scale of the cloud layers (does not affect the cloud billboards)
- weather.cloud_opacity Opacity of the cloud layers and billboards
- weather.cloud_coverage How much sky is covered by the cloud layers
- weather.cloud_sharpness How sharp the clouds formed by the cloud layers are
- weather.cloud_coloring Determines the blending of indirect light from the sky and direct light from the sun
- weather.cloud_attenuation How dark the clouds should be are when they get thicker
- weather.cloud_scattering How much sunlight the clouds should scatter (makes them bloom)
- weather.cloud_brightness Overall brightness of the clouds