Tornado Rig

February 22, 2011


There are many examples on how to achieve a tornado in Maya. Many solutions include the use of Maya fluids with the help of fields to drive the fluids in a way that simulate the air around tornados. Other solutions involve maya particles with point or streak particle types to give the look of a tornado. Again, in this case the use of fields is necessary. The problem with these methods is the lack of control. Imagine if you wanted to dynamically change the radius of the mouth or the base of the tornado. Imagine if you want the tornado to be higher or lower in density. What about the speed of the wind that spins around the tornado, many different adjustments need to be made when using fields to achieve these simple, yet necessary, controls. Ultimately, tornados will travel from one place to another, so there needs to be some degree of control when working on a project like this because unpredicted results can be dangerous when working on a schedule and others are countng on you. This is very difficult especially in a case where the most uncontrollable force in nature is involved.

I decided to tackle this project using a combination of solutions without compromising the controls needed so that animators and art directors wont run in to any problems with trying to achieve the look they are going for.

Surface of the Tornado

Particles and nParticles are emitted from the surface of an object. When their goal is the surface they will snap to the closest vertex so if they need their parent's UV, and the goalUV is attached to it, they retain the position where they were emitted. Furthermore, they are attached to that given position so now I know exactly where they are on the surface when reading its goalU, and goalV values. I can start incrementing these values so that they will 'travel' across the surface.

It is functionally working, so to create a simple rig that these particles can travel across is needed. A simple MEL expression will be needed to wrap the particles around the goals so that they dont snap to the edges of my surface.

nParticle_TornadoSurfaceShape.goalV += nParticle_TornadoSurfaceShape.randV;
nParticle_TornadoSurfaceShape.goalU -= nParticle_TornadoSurfaceShape.randU;
if (nParticle_TornadoSurfaceShape.goalU <= 0){
nParticle_TornadoSurfaceShape.goalU = 1;
if (nParticle_TornadoSurfaceShape.goalV >= 1){
nParticle_TornadoSurfaceShape.lifespanPP = 0;

Particle Shading

The lifespan for each particle is infinite, but when mapping out its radius and various shading, I can use it's position in V so that the higher it travels along the tornado, the more different it will change. I attached a puffCloud fluid to the particle because I knew that i could maximize the usage of the particleSampler node to adjust an attribute in the fluid to each particle's position in V.

Debris, Mulch, and Ground Contact

The tornado will need an extra layer for connecting it's shape to the ground. I decided to go for a 3D fluid container. I attached it to the rig and played with a few attributes to get a desired look. I needed to get random debris flying around the tornado as if these were objects left on the ground that were sucked up and tossed around in the air. I used invisible geometry around the tornado and instanced an array of objects randomly across the surface. Using the same method as the tornado, their goals were incremented until they reached the top, at which point they appeard at the bottom again.

An extra level of detail can go a very long way. This is pretty much what the mulch is used for. Everything that I've simulated so far consisted of dust clouds and particles. These are great because they give the tornado solidity and mass, however, detail is lost when we are counting shadows and highlights. I want to simulate some kind of debris that is left intact that breaks off as it is pulled upwards. An effect with this complexity leans me to go towards a 3D fluid container emitting from particles. Since I can easily control the particles to move up the rig while dynamically changing its attributes, I emitted fluids from them. This should give the feeling of tearing and ripping of the earth's surface.

Environment Dust

I implemented my tornado rig in to a car chase scene made by a very talented group of individuals. In this shot, the car executes some pretty awesome maneuvers; so dust and debris will be needed to sell the full weight and power of this car when it handles turns and oversteering.

To cut some corners and save some time I decided to make two fluid containers on each side of the car and include respected wheels in each. I created a curve around each wheel and used this to emit particles along its surface. This gave me the advantage of expanding the emitter as time continues forward and finally killing the particles after the car gains control. These particle will be the fluid emitters. I needed to create a proxy geometry around the car so that Maya can use this information as a Motion Field as it blasts through the dust. This should create the proper swirls and pulls needed to simulate a real dust cloud as a car zooms by. Finally, a volume axis field will control the remaining dust elements lingering in the air, causing them to be carried off in to the wind.


Leave a comment