Niagara particle spawn is jittery when owner moves fast

Hi there!

I have finally decided to tackle down one of the main issue i still have in my project with Niagra system:

My pawn (a ship) is moving pretty fast, actor is ticking in post physics group because I have an Async Physics plugin for better determinism. Please note that this issue is the same using base engine in-sync physics

My niagara system emits particle at a fast rate to create a kinda volumetric smoke under the ship.
Overall particle count is around 700 so not overboard,

Here is the issue:
Niagara stutter

I can not work around this issue.
Running in a smaller PIE mitigates the effect,
Running at full 4K makes it way worse (see on gif above)
It seems to me that framerate is related to this effect.
I tried almost all combinations of ticking groups between actor (pawn), niagara actor component and niagara tick behaviour, without result.

Pawn setup:

Niagara Actor Component:

Niagara system setup:


I really do not know what to try next :confused:

The closest I found on the forum is https://forums.unrealengine.com/t/moving-camera-in-relation-to-a-moving-object-causes-stuttering-lag/673174, but this does not fix the issue.

Also disabling interpolated spawning on niagara system does not fix the jitter.

Anyone would have an idea what i could check ?

Thanks a lot,
Best,
Turken

1 Like

I’m struggling with the same thing at the moment. It’s mainly an issue of the spawn rate being too slow for the speed of the object.

I cranked my spawn rate from 20 to 2000 just to test and it seemed to solve it. I don’t want that many on screen at once though, so I’m thinking a possible solution could be to scale both the spawn rate and lifespan of the particles based on the speed the system is moving at. So when the system is moving really quickly, spawn a ton more particles but have them die faster. That way it should hypothetically look roughly the same but without the spawn lag.

Not yet sure how to set that up, but I imagine it should be as simple as setting a parameter from within whatever blueprint actor the particle system is a part of.

I had the same issue with fast-moving spaceship and engine thruster effect.
This helped me
image

Hi thanks for yopur insight,

Indeed i found that in local space the jitter is way less noticable,
But when the object moves world space is usually the only way to go.

Do you think world space sim could be faked in a local sim if the emitter only rotates around its axis ?

What i need to achieve is some sort of “rocket plume”, and my ship mostly rotates relative to my pawn’s camera/

You can convert world space to local space. Here is an example, my laser Niagara system is in local space (to prevent jittering on movement) but I need the right coordinates to aim it properly at its target. So I get muzzleflash arrow component transform (which is on the top of the gun barrel) and do inverseTransformLocation with the target location


How it looks in my game
ezgif-2-5384d6a616

Hi !

Yes i can get local space from ws and inverse using transform position (or direction).

However the issue I have is that since my ship rolls fast and its engine has a plume, there is an expected “whirlwind” effect:

Here it is in video when framerate is good:

I was thinking about maybe make a niagara system attached to my camera, setup in local space and adjust emitting position and direction depending on ship position and oritentation relative to camera.

Or this system could be attached to the ship and rotate to always face the camera, then feed it the emitting position and direction each frame…

But I fear that even in local space, because the frame is moving fast, i get the same issue.

I will try in a few!

The reason is that your Niagara system spawns particles that last a long time. You need some constant effect like a laser beam

haha no sorry I was not really clear :stuck_out_tongue:

The effect I show is what i need.

The issue with having a local emitter attached to pawn is that I would not have this effect (the whole particle system would rotate with the ship).

If I understand you correctly, then simply attach Niagara system to the ship without using local space coordinates

Yes this is how things are setup for now :stuck_out_tongue:
When emitter moves fast, particle spawn is inconsistent.
Also when setting time dilation to .2 for exemple, the jitter totally disappear…

Ok so I tried the think i mentionned earlier:

NS is attached to pawn, and set to local simulation space
only yaws and pitches with pawn, but does not roll (NS Engine Up is the niagara system component)

Then I calculate the emission velocity based on roll to feed to this ‘always-up’ niagara system:
(ignore variable naming)

NS just consumes it in a Add Velocity node

and NS is set to tick in post physics (even though i use async physics and not game-thread physics so it might be irrelevant

The result is actually quite good and the jitter is 100% absent no matter the frame rate or speed:

See initial post for comparison.

Thanks again for your answers and interest in my question!
Best!

1 Like

Whats your game called? Is it out anywhere at all?

Hi! Game is called Razorback, not out yet.
Basically it’s Trackmania but with flying ships.

3rd playtest is coming mid-july (accessible through Discord, maybe Steam page if i manage to make it until then),
Alpha should come mid-sept with a 50 players public contest + small cashprizes (I am solo so don’t have AAA money :stuck_out_tongue: )

If you are interested, here is the Discord: Razorback

Thank you for this detailed explaination - seems a consistent issue with WS systems, nice to see a workaround.

Didn’t work in my usecase, but I did find that switching on ‘Interpolated spawning’ resolved the issue (of course at greater expense)