Due to the nature of graphics hardware and the way objects are processed by the graphics pipeline, it is quite hard to display phenomena such as clouds, smoke, sparks, fire, falling rain, and snow. Such effects are usually simulated with particle systems, which are a large number of small sprites that behave according to the algorithms implemented for the system.
Because of the very large number of independent entities, it is convenient to implement the behavior and mutual interactions of particles using compute shaders. Sprites mimicking the look of each particle are usually displayed as billboards with geometry shaders.
In the following example, we can see an image generated with this recipe: