How to make a Funnel Shaped Particle system?

Is there a way to make a funnel shaped particle system with just one emitter. I have been experimenting with orbit and cylinder modules but no dice. Either I can’t get my numbers right or this isn’t the right way to go about this. Any advice would be helpful.

Never worked with VectorFields, but I somehow think that this would be the way to go…

I am trying to get a tornado particle system similar to this:
Yea I am sure vector fields would work but in order to use vector fields I have to change the TypeData to GPU Sprites but I don’t know if clouds would look right with GPU. I am about to try it now. I will reply back after i get the results.

Try working with Size By Life, make particles spawn large, then become smaller and then a bit larger again, maybe put some screen space texture with panner on them with some additional alphas to make it more dynamic and go from there. It probably will not be as pretty as the one in the video but I am sure it is possible to get quite decent tornadoes this way and it will not require tens of thousands of particles.

I figured out how to create my funnel with a cylinder and vector field module. Now I just need to learn how to make a cloud material that will work for this

Do you need particles? What sorts of things do you want the tornado to do? This is done mostly within a world space material that is sampled by concentric spherical shells that follow the player.

If you only need 1 tornado at a time, I can dig this out of the old project, make it usable in 4.9 and add some comments. You could control things like location/speed/turbulence through BP with a material parameter collection. Shouldn’t be too hard to hook up to clouds or add dust around the base.

Yea I only need one tornado to go around and destroy objects in the world.

Here’s a project with the tornado. Everything you need is in the blueprints folder. You can adjust for looks/performance by adjusting the CSNumMeshes variable in the First Person Character. WASD movement. Right click is Jet up. V is Jet Forward. U and J change the tornado radius. Default is 0, hold U to make it descend. TGHJ moves the tornado on the XY plane relative to the player camera. Let me know if you have any questions.!PA83mCTC!HvG9b9AqPZGcl7ITWKMrj0jKJe543woQTveFxHsHonQ

Thanks for your help but I couldn’t find the tornado in the project. When I start the level I just rise up forever into a white light. Did I not do something right?

Tornado default and player spawn location are both at x=0 y=0. If you don’t move before you make it descend it will land on top of you.

EDIT: Hmm… the comments in the tornado material didn’t save when I cloned to a new project. I’ll take care of that in the morning.

Here’s one with a few comments and I adjusted the opacity a bit.!aE8XHLJL!reStShOK1fOLYsg0q_nJBVa6vXKxNb9CfT8oxLsNaLg

Hello xnihil0zer0 was looking around for some tornado-related stuff, and stumbled upon this thread.
Its quite a necrobump since its been a while someone replied to it.

I dont know how busy your schedule is, but is there any chance you could explain in detail how this beast works?
Looking at it from first glance, and without my lack of knowledge of blueprint. (and semi-decent knowledge of the material editor) I dont think this would be viable for a game, but I would love to know the innerts of it.

Cheers :slight_smile:

Hey Luos.

So basically, it’s overly expensive attempt at raymarching a scalar field. The Spawn CloudShell part of the FirstPersonCharacter spawns 150 spheres of increasing scale around the player. (This results in a lot of overdraw, which is why the performance is so poor.) These all have the Tornado material applied. The material’s opacity is controlled by the value of the scalar field.

The Tornado starts with a funnel looking function. Here’s the isosurface of x^2 + y^2 - 2^(z/3)^3-r=0, with r from -1 to 2:


Then some sine waves, in x and y, along the z axis, advanced by time, are added to make it look like it’s gyrating. x^2 + y^2 - 2^(z/3)^3-r+xsin(0.5t + z/12) + ysin(0.3t + z/18)=0, here with r=0.1, t from 0-4pi.


Then the world position rotated with time, around the sine wave helix, along the z-axis, this samples a noise function. The result is added to the previous function.

The blueprints are set up to control collection parameters which offset the tornado in x and y, and adjust r.

Figured out how to write raymarchers into materials. So I’ll take a crack at rewriting this as a post process, should be able to make it faster and look better.

Mind Blown

Thank you for this insight xnihil0zer0, really appreciated :slight_smile:
Would love to see the results when you rewrite this.

In the meantime, Ill just try to fake it with particles, and do a bad job at it :stuck_out_tongue:

Not sure if you have seen this but in gears3, Thomas Browett made a really sweet tornado for a Multiplayer map. It was basically a fancy funnel shaped mesh with cool materials, and used fresnel to control the edge opacity.

raymarching sounds cool too, but it might be a lot slower for something that can probably be just as good using regular materials. Ie in the above example that could just be a mesh and the vertex shader could do the random motion part.

Hey Ryan!
Good find, Will take it with me when I am going to attempt to make a tornado this weekend. (attempt 5+)