Real-Time Particle Systems

by Evan Closson
particle system screen shot particle system interface



This project was created for CSE393(Computer Animation) at SUNY Stony Brook. It demonstrates particle systems in Real-Time that can be effected by global forces that would be present in a virtual environment (gravity, wind shear). The main priorities for the program were speed and extendibility.

Using the Program

The View can be rotated by using the mouse, just click move the mouse and click again. Also the arrow keys on the numpad can be used to rotate the camera around the particle systems. The + and - key on the numpad can be used to zoom in and out.

A particle system can be loaded by typing in the path for the data in the Load text box and hitting enter. Once a particle system is loaded it can be activated, killed, or removed. Multiple particle systems can be loaded at the same time the buttons effect only the one that is currently selected with the drop down box.

Global Effects such as forces and velocity can be added or set for all the particle systems that are currently loaded. The input for each one of these is three floating point numbers separated by spaces (i.e. x y z) Each number represents the force in the x y or z direction.

What's Good About Particle Systems?

A particle system can be used to model poorly formed objects. Things such as smoke, fire, and water fall into these categories. Particle systems are physics based so little control is needed in order to model (animate) them.

What makes up a particle system?

In general a particle system is just a collection of particles where each particle contains attributes such as the current position, velocity, color, and age (how long a particle will sit around). The particle system itself can put constraints and bring some controlled randomness to the particles that belong to it to create an infinite number of special effects.

Program Design

The particle system is broken up into two main classes.

The particle system class -- to put it simply -- is just a container of particles. It provides a way to wake a particle, kill a particle, and update the particle system. The class is intended as a base class where any number of more specific particle systems can derive from it and provide more in depth functionality for the way in which a particle in the system is handled.

The particle class holds the information for a particle such as position and velocity. It is simple and should be kept that way for better performance. The particle attributes I used were position, oldPosition, velocity, age, color, and size.