How to stop a vortex velocity of pushing particles away over time

Hello everyone! I’m still somewhat new to Niagara, I followed this CGHow tutorial and created this effect where the music notes spin around the center using a Vortex Veolcity module

However, I have noticed that with the Vortex Velocity module, the musical notes start to drift away from the center, since they have an infinite lifetime and are suposed to keep spinning around. I tried to add a point of attraction force module, but that didn’t seem to fix the problem. I tried to play around with the settings of the vortex velocity without much succes.

(as you can see in the image, the notes are separeted from the music sheet, this separation increases over time)


Is there any way to achieve this and make the notes stay in the same radius without drifting away while spining around?

There are 2 fairly solid methods :

  1. Add a constraint to keep the particles at the intended distance from the center.
    Something like :
    Particle.Position = normalize(Particle.Position-CenterPosition) * radius + CenterPosition

  2. Use rotate position around point or other modules to set exact positions as function of radius and angle.
    You could also use a set module with a “make vector” dynamic input and sin and cos of particle age in x and y respectively

1 Like

If you have time, could you possibly show images of this in action?

I think I have a 90% idea of both of these points, but my smooth brain can’t get that last 10%.

Just use Shape Location module (sphere/ring/circle mode) and Direct distribution (use something like “Normalized Exec Index” or cache a “spawn time” with Emitter.Age in Particle Spawn stage for the U-position, then add the Emitter.Age for constant orbiting) to control the movement in Particle Update stage. Because this is in direct conflict with velocity-based movement, you can’t use any Velocity modules (Add Velocity, Drag, Gravity, etc.) in such circumstance, not without overly complicated setup of the emitter.

Vortex module is very fiddly to work with especially in magical effects because it is meant to simulate real-physical orbit, and magical effects don’t align well with “real physics”.


↑ That’s a variation on the second point, so give it a try!

Thank ya thank ya, I got it!

Thank you for the explanation! I am currently trying out this solution, as I mentioned, I’m extremely new to Niagara, so there are many things I still don’t understand. I already had the Direct distribution with return normalized exec index in the particle spawn. In the particle update, I added a rotate round point (as Niels suggested) from the get go, the rotate around point makes the particles spin around, but they all group in the same position
I thought I could maybe solve this deactivating “set particle position” and creating a scratchpad module where I set Particles.Postion to Particles.Position + the output of the rotate around point module, this doesn’t work however.

Could you please explain to me more in detail the steps I would need to follow to be able to properly use these modules? Thank you!

You don’t need to use Shape Location and Rotate Around Point modules separately. Shape Location module alone can be used directly in Particle Update stage to handle both the initial position and orbiting movement.

There are obviously other methods can be utilized as suggested by Niels, but Shape Location module is the simplest and all-purposed, so it’s great for designers to not deal with the more complicated setup to achieve the orbital behavior.