Designing a particle system


#1

I’m working on a vfx heavy project in Unity and I’m not particularly happy with
the stock particle system. Fortunately it’s quite easy to extend the engine so
I decided to make a particle system I would like to actually use. Here is the
overview of the very high level design:

http://zspline.net/temp/AMPS/Documentation/Overview.png

If the explanations are not clear enough then please do ask. I’d appreciate
all kind of feedback. :slight_smile:

EDIT: Attached image is screwed, added direct link.


#2

A few things I forgot to mention last night:

  • The properties and modules on the image are not final, just a selection
    to give a feel for the structure.

  • My aim is to make the system extensible so it’s straightforward to add
    custom modules.

  • The groups are laid out like this to provide guidance for the user, like
    an implied “particle wizard”. This structure will need reinforcement through
    the UI.

  • A valid concern is that it could take many many modules to get some
    common functionality. Fortunately this system has an inherent solution
    for that: new modules implementing often used functions. For example
    a “fountain” module could be added to the position group with a few
    variable parameters like “starting velocity” and “angle of spray”.

A few more examples are coming.


#3

I don’t really have the time to dive in really deep atm. At a quick glance it seems you are basing of an “emitter” as a “wrapper” around the particles. I would rather base it around a “Particle System”. Then there’s mainly two different advanced Particle System Types that come to mind: Rulebased or Eventbased. It’s not exactly trivial to wrap your head around the differences if you ask me. Anyways, as a quick example i’ll take an event-based approach. So within your “System” you have “Events”. An event is basically a group of any operators, operators can either create, kill or modify particles or display them (generate a visual representation). Modifying includes moving them out of the event.

Particle Flow in 3ds Max is an event based particle system. Here’s a screenshot that illustrates the concept:

The boxes are events. You can see a bunch of different operators (Basic rule: Green icon = spawn/emit, Blue = modify particles, Yellow (Test operators, usually move out particles if true or false))

Kind regards,
Thorsten


#4

Hmm, interesting. It first glance it looked alien but after watching a few
videos the underlying idea is quite similar. I like the flowchart sort of
arrangement. During my research I only covered game particle systems
but it seems reading up on offline focused ones might be handy as well.

By the way right now there is no clear distinction between “particle
system” and “emitter” in the overview above. Normally a particle system
contains one or more emitters but due to technical properties of Unity it
is possible that the particle system becomes a single emitter deal. This
is how the stock solution works, so a game object can only have a single
emitter component and a hierarchy of game objects with emitters act as
a particle system.


#5

I am not really up to cruise speed with game particle systems nor unity tbh. What you described first kind of reminded my of legacy particles in Max. Rule or event based systems seem a lot more powerful from my offline perspective. There are various variations and extensions (for example ICE in Softimage which abstracts even further and enables pretty much everything from particle systems over fluid simulation to muscle systems).

As for event-based vs. rule-based i am still trying to find a simple, straight forward and correct description of the difference. Cebas (makes of Thinking Particles, which is the #1 rule based one out there i’d say) have a description up. But it doesn’t nail it (goes the extra marketing mile i am afraid :P). It boils down to the rule-bases system being more flexible and generally being less dependent on the scene (as in changing the scene does not fuck up your system usually) whereas event based systems are usually less complex to set-up but give you real headaches when things get more complex and are more fragile when changing the scene.

Or as Bobo put it for rule-based particle systems: A PhD is a plus :stuck_out_tongue:

Regards,
Thorsten


#6

While reading up on thinkingParticles I found this:

thinkingParticles GE is a highly optimized version of thinkingParticles 6,
aimed at producing realtime particle effects within various Game engines available
on the market. The first game engine supported by thinkingParticles GE will be
Unity with planned support for CryENGINE and Unreal Engine in the near future.

(http://www.cebas.com/index.php?pid=news_next&nid=496)

There is no info on release date or price so there is not much to go on but now
I’m wondering if I should bother with AMPS (Another Modular Particle System).
It might be still relevant if it fills the gap between the free stock psys and the
top of the line thinkingParticles… But if TP has a reasonable price tag or several
versions with different costs then competing with that would be just silly. Damn…


#7

Heh. Didnt know that, sorry. Would have mentioned it straight away if i would have been aware!


#8

Hehe no worries. :slight_smile: I think I finish up the few examples and then have a
talk with my associate about what to do. I might do it for the experience,
if nothing else.


#9

We decided to give it a go. The high level design is reasonably solid so I wrote
an article explaining the idea:
http://www.zspline.net/blog/2013/03/11/amps-introduction/


#10

Demo of an early version: http://www.zspline.net/blog/2013/04/17/amps-basics/


#11

The first public alpha with web demo: http://www.zspline.net/blog/2013/06/26/amps-alpha-1/
Includes the example project for Unity 4 if you want to try it.


#12

Here is the beta of Amps: http://www.zspline.net/blog/2013/10/11/amps-beta/


#13

Since I’m not working with Unity anymore I made Amps open source: https://github.com/zoltan-erdokovy/Amps


#14

This is awesome. Thanks Zoltan, I wil check it out :slight_smile: