How to Improve Performance on Particle Effects?

I’m only putting this in scripting support because performance optimization is a subject that’s a little too technical for the other categories.

I’m having a serious issue with particle effects and it’s going to absolutely destroy my prospects at holding onto a large amount of players, since most users will have an unplayable experience.

For reference, my GPU is a GTX 1080…

The emitter has a size of 50, a rate of 3, light emission is 0, light influence is 0, speed is 1 to 5, lifetime is 10 to 20.

In this particular scene I’ve cut out almost everything except the lighting data, skybox, and the particle emitter.

With the emitter enabled my GPU render time sits between 10 to 18 ms… image

and the same scene with the emitter disabled:

image

I have never seen a particle emitter with such a low rate cause such a HUGE performance it. Upon finding this I went through all my other games and noticed that particle effects on average have a hit of 8 or more ms to render time. This is absolutely HORRIBLE, and my game that I’m working on in particular needs the effects for ambiance.

What can I possibly do to fix these performance problems without just deleting the effect?

lower the image quality, AND if your going to have such a big size with a long life, you’ll need to either lower the size or lower the life. Youre getting about 30-60 big sized images every 10-20 seconds (maybe more?) just for one emitter, this can be very draining I assume

Is this a big jump for the first emitter and then fairly small effect as you add additional emitters?

Surely that would be the death of every game if it added the same jump for every single emitter.

Something I’m doing in my city-building game is to make it optional. Let users switch off these extra effects in settings. Smoke and particles look cool but generally you can get by fine without most of them if the client chooses.

I actually just did that and it helped. I changed the size from 50 x 50 to 15x15. I changed the size down to 35, and I changed the lifetime to 8 to 11.

It’s still sits at about 7 ms, which is double that of most roblox games without them, plus that’s with absolutely nothing else present, so while it’s better, still kind of an issue.

It’s not jumps, it was a steady 10-12 with jumps up to 15 and sometimes higher. Highest I saw was 18.8

weird, im afraid the rest is out of my scope of practice then, maybe try making the image lower quality with an external image editor? that’s all the advice I can really give. (maybe someone else knows a better solution)

EDIT: also make sure the emitters aren’t too close together. (if you can’t avoid this, then nevermind)

1 Like

I meant the jump from 2 (without) to 12 (with). If you add another emitter does it become 22? A third make it 32? Ten emitters 102?

If not then I don’t think it’s a huge problem. If it stays around the same level when you add more, then it’s just the general processing power that enabling effects in general takes.

It’s like comparing an empty baseplate with nothing moving to one where you have a small car. Yes the processing time will be higher. Do you take the hit? Yes because you want cars. Does it make the game unplayable? No, because the jump from 10 to 11 cars doesn’t continue to increase the processing time at the same rate as 0 to 1 does.

You can’t compare a single emitter on its own in an empty place versus a completely empty place and extrapolate the performance hit, because it’s not a straight line.

Well I seem to have figured out something helpful. Roblox won’t render particles that aren’t visible, so the best for average performance is higher rate as opposed to higher size.

So if you need particles to fill a region, go with a small size, high spread, and high rate.

1 Like

It depended entirely if the user could see the particles, so in the screenshot I posted that was 1 emitter, if I added more and the user could see 2 emitters it would be a steady 15 as opposed to a steady 12.

So the jump from particles to no particles was 3 to 12. The jump after that for each emitter visible was about 3 per emitter.

yeah, if a lot of emitters are within render distance of the player, they’ll hog the gpu I bet (with those previous settings you had), im glad you found some info on this.

Fair enough. I think you’re right that smaller particles but more of them is better than a few ginormous ones.

Didn’t quite appreciate just how big 50 is for particles.

1 Like