ParticleEmitter Expansion & Tweaks

Awhile back I fiddled around with particles in another engine and decided to translate some of it’s more helpful and neat features to Roblox to try getting them added. It’d be great if anyone reading this would post their own use cases.

[size=20]Additions[/size]

  • Alignment How the alignment of the particles is determined.
    • Billboard Particles rotate to face the viewer (current behavior).
    • Fixed (example) Particles don't automatically rotate. Instead the rotation is based on the FixedRotation property. Texture is visible on both sides of the particles.
    • Velocity (example) Particles turn so that their front faces the viewer and their top faces the direction they're moving.
  • FixedRotation See Fixed alignment. Open to different ideas on how to handle fixed rotation because this feels janky.
  • Stretchiness (example) Basically, it makes particles stretchy. Technically, Stretchiness > 0 makes the bottom constantly try to move where the top is, and the value is a delay (e.g Stretchiness 1 makes the bottom of the particle constantly move where the top was 1 second ago).
  • Wander (example) When enabled particles occasionally have a bit of velocity added to their current velocity, giving them a "wandering" look.
    • Frequency How frequently it happens.
    • Strength How strong it is.
  • Frame A Vector3 used for spritesheets. X and Y are horizontal/vertical divisions of the texture and Z is the frame (e.g this texture has 9 pieces, so "3,3,7" divides the texture into 9 pieces and displays the 7th one). Or if that seems like a very weird use of Vector3 then the division could be a different property and Frame is an integer.
    • Alternatively Frame is a NumberSequence (like Transparency and Size). This would allow you to give particles an animated texture.

[size=20]Changes[/size]

  • Maximum size raised from 10 to 100. I don't think anyone ever has or will need size-100-particles, but down at 10 seems really weird and I've needed them a bit bigger at times. If the low limit is technical then a small increase would be fine too.
  • Rate changed to a NumberRange. Great for some randomness.

[size=20]Use Cases[/size]

  • Getting the obvious one out of the way: Sparks!
  • Fixed alignment + increased max size would make shockwave-like effects much easier to do.
  • I'd probably use Fixed alignment for things like an effect on the ground to help telegraph an attack, or emulate light shining around something.
  • Here's a trick using size + stretchiness. Could be used as part of a spawn/teleport effect, or even splashes.
  • I've had a use for pretty much everything here at one time or another (except the NumberSequence version of Frame, that just came to mind while writing this and I tacked it on).

Go nuts! I’d kind of prefer cases of stuff that’s impossible to do right now. Or things you’d already be doing if this stuff was available.

18 Likes

I can think of a ton of things I would do with each of these settings.
I really like these ideas.

Yeah, I’ve had a todo list for particles for quite a while here: Trello , but with all the xbox porting going on, there’s no time for me at the moment.
May be not up to date, but yeah…

2 Likes

I guess I’ll sort of take that as “maybe when I’m less busy”.

Also I’m not sure if it was forgotten or what, but despite being under “Shipped” on your todo list Drag has been around since August and it’s still not enabled.

ouch

Bringing this back up now that the Xbox release is well out of the way.

… and to mention that Drag still hasn’t been enabled yet, in case it really has been forgotten. :neutral_face:

2 Likes

Fixed alignment sounds really useful. I hope that gets added in.

Frame feature would be unbelievably helpful, I could render my explosions in blender and port them over as sprites. This wouldn’t even need to be its own object, just a property on the ParticleEmitter like:

ParticleEmitter.IsSprite = bool (default is false, if true then these properties aren’t greyed out.)
ParticleEmitter.SpriteFramesX = #OfRowsInSprite
ParticleEmitter.SpriteFramesY = #OfColumesInSprite
ParticleEmitter.SpriteFrameSizeX = Vector2
ParticleEmitter.SpriteFrameSizeY = Vector2
ParticleEmitter.SpriteMovementDirection = XY, YX, -XY, X-Y, -X-Y, etc
ParticleEmitter.SpriteXSpeed = # (How long the frame in the sprite is shown)
ParticleEmitter.SpriteYSpeed = # (How long the frame in the sprite is shown)

Could we maybe even get more then just a Starting and Ending color for particles? I kinda would like to be able to add more color changes then just a starting and ending.


As seen in the images, the explosions start out white, yellow, orange then go black, I would like to be able to do that one day on roblox. c:

I’m currently working on it.

6 Likes

Is there a chance that particle collision will ever get added?

1 Like

I think it would be great if we could specify a plane (or several planes) which the particles will interact with if real particle physics are not feasible enough.

I think one of the best approaches to animated particles would be like in the OP; allow you to set what division of the texture is 1 frame and a NumberSequence to control which frames happen when and for how long (defaults to linearly going through all the frames over the particle’s life).

Like if the division was (3,3) then frame 1 would be the top-left of the texture, 2 top-mid, 3 top-right, 4 mid-left etc up to 9. Then you could tune how it goes through those frames with the frame sequence.

I also just realized that a neat thing about the frame being a NumberSequence is you could have particles that pick a random image from a sheet for debris, leaves etc.

Any update on that?

It’s compiling…

sneak peek

11 Likes

Woohoo! Thank you!

At last, here’s something to check out!

4 Likes

:ok_hand:

Any chance of anything from the OP getting in? I’d kill for the alignment settings (especially Fixed), and I just recently found myself needing animated particles; I wanted to make a gleaming effect like <a&href=http://puu.sh/p6k8m/c0a905fba6.gif>this, but I’m pretty sure I can’t pull it off without being able to animate it.

I’d get rid of Wander if I could still edit the OP. I’ve long since realized that with the way emitters are right now, it’s a lot better to do that kind of thing myself.

Will we be able to set keyframes for the particles Emission property?

No, this “particular” update only brings a very long overdue ColorSequence editor to the plate. The size constraints were relaxed to 0…200 a couple of months ago (the spline editor doesn’t support those, but you can manually set the sequence).
And you can easily vary the emission rate from the scripts at any morph rate of your choosing.

1 Like