(Open Source) ActiveVignette system using Particles

I made a quick vignette system that takes advantage of ParticleEmitters to create moving and dynamic Vignettes for a variety of reasons.

Edit:

Added distance and auto update support.

Current usage:

local ActiveVignette = require(script:WaitForChild("ActiveVignette"))

local Vignette = ActiveVignette:CreateVignette({ Table of ParticleEmitters }) --// creates a new vignette

Vignette:Enabled(false/true) --// disables the particle effects associated with this vignette

Vignette:Destroy() --// completely destroys the vignette

Vignette:SetDistance(5) --// Set's the distance from the camera (Larger can result in phasing)

Vignette:UpdateEnabled(true/false) --// Determines whether or not the vignette will auto adjust to new FOV's and AspectRatio changes.

Please leave feedback as well as suggested features! I’ll be building on this in my free time.

105 Likes

This is pretty cool! Well done.

4 Likes

Oh nice, I’ll try to create a portal effect with this :slight_smile:

3 Likes

Does this support all kind of decals that you put into that folder or just certain ones? Other than that, a really cool module you made there!

1 Like

I was literally just looking for an effect like this some time ago, though my question was formed somewhat differently: I was looking to attach parts to the edge of the screen and move them around or create a screen cover using them. I wonder if I’ll be able to salvage code out from this.

This is looking real neat. Is the code transferrable between systems? I haven’t looked through the module and won’t have that time for a bit, but I’d like to incorporate this into my framework raw and I don’t know if I’ll have to make some changes to accomodate for that or not.

Cheers for the contribution.

3 Likes

the :CreateVignette() method simply accepts a table of ParticleEmitters. I’m sorry for not clarifying. You could do

ActiveVignette:CreateVignette({
ParticleEmitter1,
ParticleEmitter2
})

if you wanted to

1 Like

The only dependency is the Physics module that is a descendant of the base module. I imported that purely for welding purposes, but if you are willing to replace the “physics.joint.new()” stuff inside the main module, you can remove it and use it somewhere else just fine.

3 Likes

That’s sick! Can’t wait to see many cool effects done with this

2 Likes

Awesome. This is gonna help out Roblox games a long way.

3 Likes

This is pretty cool. So many cool things could be done with this.

3 Likes

Wow, this is awesome. Thanks!

2 Likes

This would be useful for power-up effects.

1 Like

I like this a lot. I have some immediate concerns, however.

  1. The parts containing the vignette should be parented to workspace.CurrentCamera rather than just workspace. This is more a thing of etiquette, I think, since CurrentCamera only exists on the client.

  2. The emitters should likely be set to enforce LockedToPart as true at least for instantiation, since leaving the particles behind kind of messes with the look of things.

I also have a couple ideas. Since you can parent emitters to Attachments, you may see it fit to implement special vignette modes, e.g. a jitter effect so that the particles on the outside of the screen shake and stuff (add a particle to an Attachment, disable the emitter, call Particle:Emit(1), move the attachment every frame). The main idea is to include more cosmetic stuff, provide some neat bells and whistles that people can mess with to really make the effects pop. You may also see it fit to manually set the velocity of the parts as the camera moves based on displacement so that particles using velocity inheritance work.

3 Likes

Time to create a migrain with this

2 Likes

Hi! So I like this alot but I have a question! How could I make it so once you get damage animated blood will pop up or like lightning? The more damage the more blood/lightning.

I’m working on a sort of “screen splash” feature that lets you be more precise with particle placement, but my wrist is currently immobilized in a cast so no coding ;c

1 Like