Particle Geometry
When doing a particle system one must decide what type of geometry to send to the GPU. In other words, what vertices. It’s also important to decide where and when to transform the geometry to screen space for rasterization.
It have been standard to use quads (sometimes just single triangles) as representation for particles. These quads are usually billboarded to the screen which requires additional work. There also exist a technique called point sprites that allows one to render a simple billboarded image by just sending a single vertice for each particle to the GPU , compared to at least four when doing quads (and maybe also indices). This sprite will be scaled by the distance accordingly to a formula that can be tweaked. It’s easy to translate it (it’s the position of the vertex itself) but it’s not so easy to rotate it. Rotation would need a special fragment shader that does the rotation manually.
Sprites can reduce the bandwidth usage a lot, at the cost of increased complexity in the fragment shader. Also, quads allows more possibilities, for example stretching. Which method is faster depends on where the bottleneck is in the rendering pipeline.
The movie above shows an example of a particle system.
Reference to the paperBuilding a Million Particle System:
http://www.2ld.de/gdc2004/MegaParticlesPaper.pdf
Some old info about point sprite based particle engines:
http://www.gamedev.net/reference/articles/article2002.asp





















