Since SU7 was released with updates to the sim’s live weather data, I’ve been interested in understanding how the sim draws clouds based on computer model data and METARs. For background, I’m a meteorologist who has worked extensively with computer model data files and uses aviation-specific forecast parameters like cloud ceiling height and visibility in my work.
Based on the recent bug report threads on this forum, a few major issues have been raised on how clouds are drawn since SU7:
- Problems rendering overcast skies: Shallow overcast layers are not opaque enough, or they are rendered with too many breaks in between (broken coverage instead of overcast), or they are rendered as a cumulus field instead of a stratus field. This has been an ongoing problem for the past several months, not specific to SU7.
- Too many cumulus or towering cumulus clouds: Cloud layers that should be stratiform are drawn as convective clouds, and even cirrus clouds are frequently drawn with a cumuliform appearance. This has also been occurring for a long time before SU7
- Clouds too low or on the ground: This is an issue that was apparently more frequent after SU7.
The more I’ve tested the weather system and seen reports from other users on the forum, the more I’m convinced that the first two problems are related to the way the sim interprets model data to draw clouds. The feature discovery video on weather that was published before MSFS was released gives some valuable detail on how the sim draws clouds:
- Clouds in MSFS are fully volumetric – capable of being viewed from any angle
- Cloud information is provided at 32 levels in the atmosphere
- Depiction in the sim is informed by “density, shape, and fuzziness” of the clouds
I suspect that “density, shape, and fuzziness” are different names for the parameters that MSFS uses to draw clouds. In the custom weather menu, a user can define a cloud layer with three parameters: coverage, density, and scatter. I performed several tests yesterday to understand how each of these three parameters work.
Coverage: This is the simplest of the three. The coverage percentage appears to determine the fraction of the area that is covered by clouds
Density: This appears to be a radiative scattering parameter which is used by the rendering engine to depict how opaque the clouds are. I created three screenshots to illustrate. All three screenshots show a cloud layer with a bottom at 920 ft. MSL and top at 3000 ft. MSL.
Density = 0.30:
Density = 1.0:
Density = 3.0:
For shallow stratus layers, the density parameter determines the opacity of the clouds. It also determines whether the sun will be visible through the clouds from ground level.
Scatter: This parameter appears to modulate between stratiform and convective cloud types. If scatter = 0 the clouds will be more stratiform in nature, and if scatter = 1 they will be more convective. It’s hard to tell exactly what is going on behind the scenes here, but one way of envisioning it is: If you think of clouds like waves, the scatter parameter adjusts the wavelength between peaks. If scatter = 0 the wavelength is very long (tallest peaks of clouds are widely spaced apart, and clouds are drawn more contiguously), and if scatter = 1, the wavelength is very short (tallest peaks of clouds are close together). Here are three examples for a very deep cloud layer between 920 ft. MSL and 30,000 ft. MSL:
Scatter = 0:
Scatter = 65.71
Scatter = 100
As you can see, when scatter = 0, the height of the clouds gradually varies across the field of view, with a clear spot in the middle and gradually sloping clouds on either side. Increasing the scatter parameter results in a field of view that is increasingly covered by tall towering clouds, with scatter = 100 producing spiky towers close together.
I suspect these three parameters are the three mentioned in the feature discovery video – just with different names. If true, that leads to a crucial point: weather model data only provides a subset of the information needed by the sim to draw clouds.
As an example, the GFS model (Global Forecast System) from the US National Weather Service outputs two cloud-specific parameters at various levels in the atmosphere:
- Cloud cover (expressed as a percentage)
- Cloud water mixing ratio
Cloud cover from the model could probably be used for the coverage parameter in MSFS. I’m not sure if the two are expressing exactly the same thing, but I suspect it’s close enough to be useful.
At first glance, cloud water mixing ratio might be related to “density” in MSFS, but it isn’t identical. In MSFS, density is a scattering and opacity parameter. Scattering and opacity are strongly dependent on the size distribution of cloud droplets, not simply on the mass of water per unit of air mass in the clouds. The model does not produce any direct equivalent to the “scatter” parameter.
In light of this, I suspect that MSFS needs to “translate” model data into its three cloud parameters in order to draw live weather. Based on my testing, this produces multiple conundrums for realism:
Thin Stratus Clouds: As shown in the three examples for density above, shallow stratus layers in MSFS require a very high density to be opaque enough. In the real-world, it is not unusual to experience conditions like this:
But MSFS currently does not produce stratus layers with sufficient opacity to reproduce the experience of breaking out into sunshine suddenly after passing through a layer that is only 2000 or 3000 ft. thick.
Furthermore, even a small reduction in coverage below 100% exacerbates the lack of opacity. In my testing, reducing the coverage below 100% resulted in a noticeable reduction in the height of the cloud tops, even though the cloud top altitude slider remained constant. Here is a depiction of a stratus deck between 920 ft and 3000 ft MSL with coverage = 95%, density = 1.0, and scatter = 0:
To produce realistic narrow stratus layers with the current weather engine, it would be necessary to maximize coverage and density. It would be very challenging to make this work well. If nearby gridpoints in the model are clear of clouds, an overly sharp edge of the cloud layer could be drawn, rather than a smooth transition from overcast to clear.
On the other hand if the stratus layer is deep (several thousand feet from bottom to top), a high cloud density results in excessive shadows at the top of the cloud deck cast by tall portions of the cloud onto lower areas. This is the classic “volcanic ash” appearance which has shown up in many screenshots and reports on the forums:
Cloud layer between 920 ft and 20,030 ft. MSL. Coverage = 100%, Density = 5, Scatter = 0:
In this case, lower densities look more realistic:
Cloud layer between 920 ft and 20,030 ft. MSL. Coverage = 100%, Density = 1, Scatter = 0:
Cloud layer between 920 ft and 20,030 ft. MSL. Coverage = 100%, Density = 0.30, Scatter = 0:
The drawback to low densities is their translucent appearance. When climbing into a cloud layer, the ground will still be visible for several hundred feet until it finally fades from view. Near the top of the climb, the sun will become visible through the clouds, and breaking out above the clouds is less dramatic than in real life.
Another apparent feature in the last few screenshots is that cloud tops are drawn with a lot of cumuliform, convective features (like cauliflower) which can be softened in appearance by setting the density lower. But softening the clouds is only a superficial effect. Those features still exist, they are just thin and translucent. And the side-effect is that clouds are far less opaque.
Deep Cloud Layers with Less than 100% Coverage:
The problem I just described becomes a serious issue when a deep cloud layer is defined with less than 100% coverage. Since the default cloud engine draws clouds with convective (cauliflower-like) tops, this results in towering cumulus clouds by default. Here is an example with coverage = 70.86%, density = 1, and scatter = 0:
With the scatter parameter set to 0, this cloud field should theoretically look less convective than with higher scatter numbers. And yet it looks extremely convective and a little like volcanic ash clouds. The problem is even worse with density = 5:
To produce clouds that look less convective, the density parameter needs to be dialed down to very low values. Here’s the way it looks with density = 0.10:
As I mentioned earlier, though, the clouds become very translucent at low density. These clouds will suffer from a lack of opacity. The sun will be visible from deep within the cloud, and it will require a long ascent into the cloud base before the ground is no longer visible.
Conclusion
Based on the results I’ve described, I can appreciate how difficult it will be to fine-tune the live weather depiction to show more realistic features. For different cloud types, realism requires clashing cloud parameters in MSFS. Shallow stratus clouds require near 100% coverage and maximum density to be realistically opaque. But maximum density for thick stratus clouds leads to a dark, volcanic-ash-like cloud top.
For layers with less than 100% coverage, the scatter parameter modulates the convective appearance of clouds. But when the cloud layer is deep, the cloud engine’s default cloud shape is stretched vertically in a way that looks strongly convective even when scatter = 0. The only way to soften the appearance is to decrease the density to very low values. This produces the unwelcome side effect of excessively translucent clouds.
Ensuring realism requires tuning these parameters carefully with different values for different cloud layers. It’s hard to know if these differences can be properly blended together if multiple layers exist. I suspect that ultimately, the cloud drawing engine (with its default cauliflower shapes) will need to be modified to support better diversity of clouds in the future. But in the meantime, the existing system requires tradeoffs.