The particle systems implementation is going well, I just tried pushing the performance a little and it quite happily rendered 10,000 particles at 50fps on my machine (1Ghz Athlon, GeForce 2) – this system had 1 emitter and a gravity affector. In reality though 10,000 particles is too crowded for most systems, a few hundred are normally enough and Ogre eats these for breakfast, running at over 200fps on my machine with a system up to 1000 particles in release mode.
The good news is the plugin approach is working well, both PointEmitter and LinearForceAffector used in the above example are loaded from a new plugin called OgreSfxPlugin.dll.
I also managed to leverage my existing classes for culling, so you can cull a particle system either as a whole (all or nothing, useful for systems where the particles are closely grouped e.g. a fountain) or individually, where each particle is culled on it’s own merits (useful for systems where particles are spread out e.g. a snowstorm). When I tested my 10,000 particle system both ways, culling individually was slightly faster because there is almost no way you can see all 10,000 particles at once. The application designer can make the choice in real apps.
In a few more days I will release another snapshot, once I have a few more emitters and affectors going and the script parsing is in. Watch this space.