One thing that sometimes trips up new users of the SilverLining Sky, 3D Cloud, and Weather SDK is that although we have a common API for all SilverLining::CloudLayer types, individual types of cloud layers have little differences in how that API is interpreted. Some clouds behave very differently than others in nature, and so this is to some extent unavoidable. We’ve made an effort to document all of these little quirks in our API documentation, but they’re easy to miss.
If all you need to do is create a common weather condition, have a look at SilverLining::AtmosphericConditions::SetPresetConditions for a simple way to just get the clouds set up for the conditions you want, without worrying about any of this.
But if you do need finer control over the clouds in your scene, here’s a rundown of every cloud type currently available in the SilverLining SDK – and things that are unique about each one.
Cumulus Congestus (and the “hi-res” version) – The “thickness” of the cloud layer actually represents the variation in base altitudes of individual clouds. The actual height of each cloud is governed by a cellular automata simulation, and they can vary greatly from cloud to cloud.
Cumulus Mediocris – As with cumulus congestus, the thickness represents the variation in base heights. It is also important to not use too high of a density value with cumulus mediocris; these clouds are very small, and if you try achieve a high cloud coverage with them, it will result in so many clouds that it will impact performance even on the best systems. Cumulus mediocris clouds are associated with fair weather in nature, so you shouldn’t go above say 30% density with them.
Stratus – If you set up an “infinite” stratus cloud, we assume you want it to extend from horizon to horizon, and this is done automatically. The length and width you specify for the cloud layer is ignored in this case. Also, “SetCurveTowardGround” will only work with infinite stratus clouds – otherwise, a localized stratus cloud would end up looking like an odd dome from the outside.
Stratocumulus – These clouds are rendered using GPU ray-casting, using actual 3D textures. 3D textures eat video memory alive, so don’t make these clouds too large. Also, make sure the thickness specified for stratocumulus clouds is high enough to enclose the individual clouds within the layer – otherwise, the top of the cloud layer will look like it’s chopped off. Under the hood, stratocumulus clouds are “grown” using the same algorithm as cumulus congestus clouds, so if you encounter performance or visual issues with stratocumulus, you’re often better off replacing them with an equivalent cumulus congestus layer.
Cumulonimbus – A cumulonimbus cloud layer only includes a single cumulonimbus cloud, which is stretched to fit the cloud layer dimensions you specify. So, don’t make these too large – around 5km cubed is about right. Unlike the other cloud types, cumulonimbus clouds are not procedurally created, but are loaded from pre-generated model files, chosen at random and in VRML format, stored in the resources/clouds/cumulonimbus folder.
Towering cumulus – These very large clouds consist of many particles, and so you should keep the density of their cloud layers low. Generally 20% or so is realistic for stormy conditions. Like the other cumulus cloud layers, the thickness only controls the variance in base altitudes.
Cirrus and cirrostratus – These high, wispy clouds are little more than giant textures in the sky, and their wispy edges mean they do not tile. If you create an “infinite” layer of these types, it will merely anchor the cloud above the viewpoint at all times. Given their high altitudes in nature, this usually ends up not being noticeable as the camera moves.
Also, be sure to read our earlier article on simulating specific weather conditions with our cloud layers.