Part Emitter | Create particle effects that can interact with their surroundings

Part Emitter



What?


Part Emitter is an open-source module designed to allow the emission of particles that can physically interact with their environment on Roblox. It allows you to create Physical Particle Emitter objects that, for the most part, act just like regular Particle Emitters. However, unlike Particle Emitters, Part Emitters are, for example, able to detect when a particle is touched and can even be affected by the physics engine. All of these behaviours can be configured by the user to suit their need.



Why?


Have you ever wished your particles wouldn’t go through the floor? Perhaps you want them to emit light into their surroundings? Maybe even detect when a player touches a dangerous gas particle? If so, this is the module for you! The Part Emitter system gives you a simple yet powerful API to create and handle physical particles.

Here is a small sample of what you could create with this:

Sparks that collide with obstacles

Fire particles that actually emit light



Where?


There are two ways you can get the module:



How?


To get started with using Part Emitters, refer to the documentation site.



Performance


Below are a couple of benchmarks on the module’s effect on server performance, done in an otherwise empty game.

Using a very high emission rate on 1 or 2 Part Emitters

High emission rate, 1-2 emitters

Using an emission rate of 10 on a large number of Part Emitters

Multiple emitters, emission rate 10_s for all

Please keep in mind this module is not meant to replace all regular Particle Emitters in your experience. To keep your experience performing smoothly, you should only use this system in places where it is absolutely necessary for particles to utilise the functionality the module provides.



License


This resource is licensed under the GNU General Public License v3.0. This means making modifications of the module is allowed, as long as they too remain open-source. Commercial use is also permitted by this license.

42 Likes

I like this especially the obstacles colliding part but

what is this is implemented as modified into a game? We can’t make the game uncopylocked

Good stuff! This can probably help adding more realism to games, without developers having to make all this themselves.

I am not a legal professional, so take what I’m about to say with a grain of salt. The GPLv3.0 license is only for the Part Emitter module. Whatever other systems you happen to use it with do not need to be open-sourced, just the Part Emitter module itself. This means that having it in a game does not require you to uncopylock the experience.

If you do however modify the module itself, the license requires publishing the source of the modified Part Emitter module. The easiest way to do this would be to simply create a fork of it on GitHub, for example.

This was the part i was interested about so you are saying that we can use this module modified in games by publishing the modified version used in the game on github or can we just put the modified version in the game without open-sourcing that part of code in this case?

Yes, exactly this. If you make modifications to this module, the modified version would have to be published. Using the module in a game without modifying the source code included does not count as modifying the resource, and therefore doesn’t require any extra action from the developer.

To make it clear, you only have to worry about the license terms if you create your own version of the system based on the already existing source code and use it in public works.

1 Like

Do you have any benchmarks available for performance? I would love to use this for future projects if this is able to be used for large scale projects.

1 Like

Glad you brought this up, as I had admittedly forgotten to properly run the performance tests, which in turn prompted a couple of patches I’ve now released on GitHub and Roblox. (Will post the release notes about those after this response)

Below are the benchmarks I ran after these patches.

Using a very high emission rate on 1 or 2 Part Emitters

High emission rate, 1-2 emitters

Using an emission rate of 10 on a large number of Part Emitters

Multiple emitters, emission rate 10_s for all

It is very important to keep in mind that using rigid body simulation for the particles emitted by the system will quickly degrade performance with high enough emission rates, as the particles are being handled as unanchored parts. With rigid body simulation disabled, performance is significantly better, however this too is slower compared to regular Particle Emitters, as the position of the particle’s collision model has to be updated every Heartbeat.

TL;DR
Remember to use the system with moderation. It’s not meant to replace all Particle Emitters in your game, just those that absolutely need to have the features the module offers.

1 Like

IMPORTANT PATCH - UPDATE THE MODULE IN YOUR GAME
The most recent patch I’ve released fixes a critical memory leak problem in the module. If you are currently using an older version of it, it is highly recommended you replace the old version with the new one (available from the same Roblox and GitHub links in the OP).

1 Like

This is cool and all, but… how do i even set it up? The documentation is really confusing me by its sense.

2 Likes

Would this be able to render inside a ViewportFrame?
Either way, this is a neat resource.