Particle Systems


I’m thinking of doing a final year project at University on particle systems for a VR world. I’d really like to hear from anyone who’s done any work on this so I can figure out whether it’s what I want to do or not.

The project would be used for simulation of rain, snow, fire etc but as it’s a 240 hr project; it will need to be quite deep including such physically mind-boggling stuff as simulated and approximated fluid dynamics.

I am a pretty accomplished OpenGL programmer capable of knocking up a crappy FPS in a few weeks. I got an A for Physics A level as well which I guess could come in handy.

Any help or thoughts much appreciated,


Particle systems are actually really easy to code since all forces affect the particles linearly (spelling?), no rotational forces simplify stuff a lot. It’s pretty trivial to add wind and springs to get really cool results. Collision detection is also simple, and particels tends to look really good withsimple rendering methods like blended billboards. I don’t know about fluid dynamics though, as far as I know most simple fluid dynamics stuff uses some form of heightfields to fake shallow water, i.e no particles. I’m far from sure though. Doing the full Navier-Stokes equation in 3d might be a bit slow… So I’d say go for it, it’s fairly easy to get impressive esults fast.

I’m half way through my final year project on medical visualisation (engineering degree) and I chose to use OpenGL as my rendering API. I’d say go for it. I also knew OpenGL a little bit beforehand but I’ve learnt a lot.

Your project will allow you to put as much time as you want into creating a professional quality visualisation system. Because you’re doing something you enjoy you will work harder on it and the stuff you learn will help in your hobby as well. Also, from previous year’s theses at my university, visualisation projects score well since the results are so visually stunning.

One of the choices I had to make was whether to use OpenGL, OpenInventor or Performer under Linux. I chose OpenGL/GLUT/GLUI because I wanted the control OpenGL offers (and I use Linux/Windows dual boot), but bear in mind the other two are also excellent APIs. Performer also has a very active mailing list and most of the users have very good credentials. I think the difference is most of us here do this for fun, but most Performer users are serious visualisation professionals. Lots of people from SGI, NASA, Boeing, Disney, university research depts, etc. You may already have considered these APIs. I’m just mentioning them because they offer an attractive option for very large dataset visualisation (like VR worlds). See for one of the SGI Performer engineer’s pages - excellent demos, the one called “Aqua” uses particles to simulate bubbles. SGI website has more links to OpenInventor and Performer. Best of all, you can combine them with OpenGL very easily (since they’re built on top of it).

[This message has been edited by ffish (edited 05-03-2001).]

[This message has been edited by ffish (edited 05-03-2001).]

Rain should be fairly easy, since the particles don’t need to interact with each other… with fire and smoke they could, but don’t necessarily have to. I’ve done a pretty decent looking smoke simulation with simple billboarded particles that have an ‘up drifting’ force and some random wind forces.

For fluid dynamics, if I’m not mistaken, the most widely used approach is, to simulate a number of particles from the fluid volume and their cohesion - the particles are connected by a ‘spring’ similar to cloth simulation, only that the spring can be disconnected if forces of a certain strength are applied to a particle, and reconnected if the distance between particles goes below a certain threshold. The more particles simulated in the volume (the higher the volume’s resolution), the more realistic the simulation will look.
For the rendering then, only the borderline particles (the outermost particles of the volume) are used to generate a mesh.
The problem I see with e.g. a water simulation is, that arbitrary fluid volumes have to be generated, joined and removed runtime (think about splashes and drops of water).

Thanks for all the help.

I’m still not entirely convinced as accurate simulation requires so many different physics pulls.

Convection, external pressures etc. but I’m sure a lot of these could be dealt with using springs as mentioned above.

My big hangup is that I want to do a graphics project, not a physics project - but as mentioned above, the results do look great!!