BlueSkies employs a large number of particles in order to generate cloud layers and thus any developer much be conscious of the size and amount of clouds created. There are several ways to configure the number of particles generated and the impact they have on your application.
There are two different techniques to create large, dense clouds, both of which have different hardware constraints.
The first method is to use a large number of small particles. This approach is primarily CPU-bound as the main performance impact results from updating each particle's position, lighting, size, etc. To utilize smaller particles, there are two steps:
The second method is to use a smaller number of particles, but having each particle being of a greater size. This reduces the impact on the CPU but more heavily taxes the GPU due to overdraw caused by the overlapping transparent cloud puffs. To utilize larger particles, there are two steps:
Depending on the number of clouds, and their particle density, the lighting update pass can be a costly operation.This frequency of this operation can be set in-editor (or via script) using the BlueSkiesManager::lightingRefreshRate variable. This variable represents the frequency (in seconds) to update the cloud's lighting. So a value of '0.5' would update the lighting every half second.
Generally, the less dense the cloud cover the faster this refresh can be. Below are some suggested refresh rates:
|Cloud Cover||Rate of Time||Suggested Refresh|
|Light||Slow / Realtime||5.0+|
|Heavy||Slow / Realtime||10.0+|
|Light||Fast (100+ times speed)||0.1 to 1.0|
|Heavy||Fast (100+ times speed)||0.5 to 5.0|
Cloud puffs can be sized in two different manners: voxel dimensions and puff size. Below are suggested values for each.
We recommend that voxel dimensions not be set below 100 for all cloud types. General recommended density, depending on computer performance, is between 150 and 250. Please keep in mind that any change in voxel dimension should be reflected in updated puff size or else the cloud may appear to sparse or have too great of a performance impact.
For cumulus-type clouds, we recommend a puff size being between 800 and 1500.
For cirrus clouds, we recommend a puff size of approximately 90000 assuming an altitude of 10000+ units. It is important to keep in mind that a cirrus cloud is comprised of a single particle.
We are constantly striving to make full-coverage scenes easier to create and have better performance. While we continue development, we have the following suggestions to achieve a full, or near-full, coverage scene.
Using multiple cloud layers of smaller coverage can sometimes yield better results (both visually and performance-wise) than a single high-coverage layer. Adding different WindVolumes, so that each layer moves at a different rate, can also help.
Increasing puff size can greatly increase the visual coverage of a layer. Many times, by increasing puff size you can also reduce the coverage and have a better performing scene.
By enabling the 'StretchToHorizon' parameter in your cloud layer, the clouds will be placed on a curved layer. This effect is based on cloud distance to camera, camera altitude, and calculated distance to horizon (assuming an sphere of similar radius to the Earth).
The result of this effect is especially obvious at lower elevations. Cloud layers that once took up only a fraction of the sky, will now completely cover the entire skydome.
It is noted though that this option is not currently recommended if your application simulates rapid changes in elevation, unless the rest of your scene also accounts for a curved-surface. Future releases will expose more options to account for rapid elevation changes.