Water, Fire and Smoke Effects Using Particles and Opacity Maps

This is by no means a new technique, in fact, I saw it being demoed at the Kinetix booth at Siggraph, but people have asked several times how I create my smoke and water effects. So here's a quick tutorial discussing the concepts.


Particle Systems

First we need some particles. In general, start by creating a super spray particle system. Then start changing parameters.

Both Off-Axis and Off-Plane spreads should be numbers between 10-20. This will let the particles spread out a bit after they're launched from the emitter.

Adjust the particle rate and speed for whatever effect you're trying to achieve. Rushing water is fast, smoke is slow, fire somewhere in between. Remember to add some variation.

Change the Life parameter. Fire dies out, so have the particles die before they reach the top of the screen. Water and smoke tend to linger.

Make a large particle size, and a large variation. Add a positive fade number if you want the particles to decrease in size before they disappear (like in fire).

Under particle type, click on standard, and facing particles.

Under Particle Rotation, use a spin time between 30 and 100 frames, give it a large variation (like 50%), and spin the particles along their Y axis. This is so when we apply our material, not all the particles look identical (since each particle will be at a different stage of a rotation).

Standard Material
All three effects use a similar material type. Here's how to make the standard material.

Click on the box preview, so you're preview sample is a box and not a sphere.
Next, click on face map. This is very important, since you're mapping each individual face of your face mapped particles.

Turn shininess and shininess strength to 0, since you're going to be playing with opacity maps, and don't want an unwanted glare from transparent parts of your particles.

Under the Diffuse map, create a gradient material. Make it a radial gradient, change the colors from a dark color to a light color (or red to yellow, in the case of fire). Set Noise to an amount of 1.0, and type: fractal. Size depends on the overall size of your scene and the size of the particles. Play with this till you get the desired effect.

Next, make an opacity map by copying your diffuse map into the opacity map. Change the opacity gradient's colors to black, grey and white.

Now convert the opacity gradient into a mask map, with the gradient as your primary map.

Under mask, place a second gradient. This should be a simple radial gradient with no noise, which is white in the center and black on the outside. The reason you do this is because this mask will remove any noise that appears at the edge of your facing particles, so you're guaranteed to have a nice rounded particle, and it won't betray the fact that you're actually using 2D geometry to simulate a 3d effect.

Now on to the variations.

The first example is water from a waterfall. Water, when there's enough of it (look at Niagara falls) becomes a thick mist. For this effect, I used a lot of particles on top of one another. The noise map has a large size value to make the water look more puffy. I used a gravity spacewarp to help pull the particles down in a nice shoot.

The fire example doesn't use a super spray, but a PArray, which does the same thing, except the emitter can be any object (in this case, a torus). The material uses a large noise size value, and has an opacity filter type of additive (under extended parameters). This makes the flames glow. I included a large fade number so the flames die out as they rise in the air. The particles rise due to a wind spacewarp.

Last is the smoke example. It's very similar to the waterfall, except there's a lot less particles, the spin is much slower, and the particles are moving more slowly (since smoke tends to rise more gradually). You could also try playing with more wind modifiers to create some rather interesting swirling smoke effects. As far as the material goes, the noise size is slightly smaller, The colors of the opacity map are much softer so the smoke is more transparent, and I also tinted the color slightly blue to add some variety.

Well, there you have it. This is only the most basic of recipes, things to try are experimenting with Particle Age maps, different noise types and parameters, shininess maps, bump maps, and different combinations of spacewarps (try animating the strength values of wind and gravity for some really nice effects). Also try other kinds of effects, like dust clouds, mist and tornados. Just let your imagination take over.