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:
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
Using an emission rate of 10 on a large number of Part Emitters
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.
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.
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.
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
Using an emission rate of 10 on a large number of Part Emitters
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.
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).