UE4: trying to build a tornado of smoke

UE4 trying to make a tornado of smoke that when born is traveling around the perimeter of a circle as it rises up it’s orbit slows.

I have been trying to achieve this just with particles, being emitted from a circle and traveling upwards. But I cant make them orbit around the center of the circle. Any ideas how I can achieve this in UE4?

Maybe I need to achieve this with cylinder object with a twist on it. So it would be more of a UV material thing rather than a particle thing?

Everyone will have a million suggestions but here are some of the things I’d look into if I were tackling something like this:

First off, find some reference from a tornado you like, whether it’s a real tornado, or just a smoke devil or whatever. I’ll assume a real world weather tornado.

Tapered cylinder with twisted Geo/UVs for spiraling pan. Probably a few layers of these depending on your performance target. Mulitple layers of bump offset, with panning textures in the bump height parameter intertwining so they come “forward” and “back” in perceived space as they swirl around. A flowmap on the cylinder for interesting motion and smooth interpolations. Tesselation and a cloudy heightmap that matches your diffuse panning texture, for a volumetric look and to break up that geometry edge. Frensel to soften edges also. Perhaps run a sine wave through the geometry via a vertex shader (World Position Offset), if you multiply the sine wave by the Y channel of your cylinder texture coordinates it will automatically mask along the length, meaning the bottom of the cone will stay connected to the ground and the top will “swirl”. You can pan the sinewave through worldspace which would alter the appearance of the swirl as it travels by bending it around organically. If you offset the geometry by waveforms on multiple axes you can make the mesh “corkscrew” as well which is a common look for such things.

Lighting wise, you might be able to just light per vertex and throw some unshadowed point lights around and it will illuminate the thing with flashes, etc. Have to try the various settings there.

For particles I’d use GPU particles, aligned to velocity, and in an offline package like Maya or Houdini I’d author a spiraling vector field for them to follow, with randomness. You’d want a mix of motes, bits of whatever terrain it’s traveling over (grass, hay, leaves, asphalt chips, whatever). Mesh particles for larger chunks, or render some imposter sprites for those if they would be cheaper for you. Unreal also has an Orbit module in cascade which can make spiraling motion, pivot offset can be helpful here also. Depending on speed of travel, you may have to fake motion blur on the particles by blending them with a blurry version of their texture based on their speed. Don’t forget to dim them slightly as they speed up, conservation of energy and all that :wink:

Lastly you’re going to want some large scale whipping wind, that would likely just be sprites with lots of soft alpha, depth fade, and whatever else swirling around.

There’s tons more you could do after these steps also, but if I was doing something like this for a game I would probably start there and then see what you’re missing, like physics bodies, decals on the ground as it tears along, all kinds of things.

Tornados are fun.

9 Likes

Thank you Wyeth for taking the time to write this out. Lots of good information here.
I ended up using the Orbit module to spiral my cloud particles. The orbit tool is not intuitive at all, and I spent almost a whole day trying to figure it out, It looks okay. but I think could be better. I think I will redo it again with your suggestions.

Great information here. Thank you.