ParticleSystems.org

Announcing version 2.21 of the free Particle System API!

"Probably the best tool around for understanding and creating particle systems." -gamedev.net

The Particle System API allows C++ application developers to easily include dynamic simulations of groups of moving objects. The API is much lighter weight than a full physics engine. It is especially useful for eye candy in games and screen savers, but is also used in off-line animation software.

With the Particle System API you create a group of particles, then describe the components of the particle effect using actions like Gravity(), Explosion(), Bounce(), etc. You apply the actions to the particle group at each time step, then read back the particle positions and other attributes into your app, or send them directly to the GPU as a vertex array or as geometry instances.

Sign Up For Particle System API News (a few emails a year)

Check out this talk about particle systems in DX10 from GDC2007.

Version 2.21 released December 30, 2008

Download the API and documentation, and the Demos for Windows.

Browse the documentation online.

Version 2.21 Highlights

  • This is a minor bug fix release, in preparation for version 3.0 which adds Nvidia CUDA support.
  • Made user data an attribute of particle source state, settable via the Data() call. Also made it a 64-bit unisgned integer. Before, it was sometimes a long and sometimes a void *.
  • Added a Callback() action that simply calls user code for each particle in the middle of particle simulation. This allows for implementing effects that can't be expressed solely with the existing API.
  • Ported to Visual Studio 2008 (MSVC 9.0). This yields about a 15% perf improvement.
  • Fixed a memory leak with deleting ParticleContext_t.
  • Fixed the bug with the distributed demos not running on certain XP machines because of a bug in the compiler's manifest generator.
  • Fixed bug with bounding boxes.
  • PSpray now waits at least 6 seconds before cycling to a different random demo.
  • See the Change Log for a full list of changes in each version.
  • Thanks to Andrew Chew, Stefan Maton, Lloyd Tullues, and Bryan Witkowski for bug reports and fixes.
Version 2.20 released March 20, 2007

Download the API and documentation, and the Demos for Windows.

Browse the documentation online.

Version 2.20 Highlights

  • Added the PDUnion domain, which is the union of multiple other domains. This gets us closer to being able to define a polygonal model domain. It also is a good way to specify colors for the Balloons effect, where colors come from disjoint sets, not from a continuum.
  • 3X Performance speedup for the pNRandf() function, which is used frequently.
  • Fixed the Within() function for many domains. Some domains just had their sense reversed. Non-3D domains used to always return false but now I try to determine whether the point rests in the plane or whatever.
  • Fixed Rotational damping. It was previously just doing positional damping. Oops!
  • Avoid() of a rectangle was steering toward the middle of the rectangle sometimes.
  • Avoid() of a plane was pulling away from the plane too sharply, basically bouncing.
  • Avoid() was incorrectly being scaled by dt when computing the look_ahead position.
  • Wrote some domain self-testing code that does Generate() then calls Within() on the generated point to make sure they match.
  • Added the new pError.h file and added an error when negative radiuses are supplied to a domain.
  • Made PSpray check whether you have SSE and whether you have the necessary OpenGL extensions for point sprites.
  • See the Change Log for a full list of changes in each version.
  • Thanks to Greg Croft, Lloyd Tullues, and John Berendsen for bug reports and fixes.
Version 2.10 released December 1, 2006

Download the outdated API and documentation, and the outdated Demos for Windows.

Version 2.0 beta released February 24, 2006

Download the outdated API, the outdated Demos for Windows.

This is the first major update to the Particle System API in five years. It includes enhancements in several areas. Here are the major improvements:

Version 1.5 beta released December 20, 2005.

Download the outdated API

This is a source code release. It's a .zip with Makefiles and Visual C++ .NET project files. It's really just an earlier beta for 2.0.

Version 1.21 released February 24, 2001.

Download the outdated API, the Demos for Windows, or the outdated documentation

Version 1.21 adds a size attribute, a PDTriangle domain, bug fixes, and I'm not sure what else.

January 2000 Here is a technical report about the design of the Particle System API.
Version 1.11 released February 2, 1999.

Download the outdated API

Version 1.11 adds a length attribute, bug fixes, more domains and other stuff.

Seeking Your Input

I've recently (2005-2007) improved the API a lot, but it could always use more work. Also, I am considering releasing the project into the wild as an open source project. If you have any experience setting up an open source project on SourceForge or similar sites, I could use your help. If you would like to help with any of the above, or have any other contributions to the API, I would sure appreciate them. .

Projects Using The Particle System API

  • The Alice virtual worlds system from CMU uses the particle system API.
  • Profound Effects uses the Particle System API in their Useful Assistants and CameraPOV plug-in suites for AfterEffects.
  • real-time editing and effects system.
  • I first used the particle system API for the smoke and steam on Hewlett-Packard's PixelFlow train demo at Siggraph '97.
  • The API is being used in dozens of games, mostly open source and independent.
  • Flow is a project by Mark Allen using the Particle System API. The cool lava pictures were from his system.
  • GEM (Graphics Environment for Multimedia) uses the Particle System API for cool effects.
  • RIMM is an interactive music and eye candy extravaganza.
  • Blade3D's particle system is heavily inspired by mine, according to its author, Christian Beaumont.
  • Eye-Sys is a visualization architecture that looks pretty cool.
  • The Ars Electronica Center uses the Particle System API in several augmented reality exhibits.
  • A bunch of other developers have contacted me over the years and told me about their projects but I haven't kept track of them. If you have a project that you'd like me to list here, .

Thanks to Jon Leech of SGI (previously of UNC) for code and ideas fundamental to the Particle System API.

For use with or .

Click here to see animation.