Performance and tonns of objects

I am doing a particle system where particles are Geometries with Mesh which is a point, two-vertex line or somethis as simple. I do this because I want to control every particle object individually. However, with counts of like 3000+ particles, the fps drops to ~30 from 2000+. I have read the forums and there was a similar situation for people here, where various practices like doing shader particles or making them one mesh were proposed. However, I would like to know:

  1. Is there any way to increase the framerate, retaining the particles individuality and customizability?

  2. What is the bottleneck for this situation? Apparently, there is a trouble of having too many objects, coz a single object, containing the geometry of all these particles does not lag at all.

  3. What is the recommended (average bearable) amount of objects in a camera view for a JME3 game? I know that this is vague, but I would appreciate any data on that.

My machine is Intel Core i5 3.2GHz, 4Gb RAM, 32bit, NVidia GeForce GT420, and I have:
a) 2000+ -> 30+ fps with 3000+ made-of-two-geometries particles (6000+ objects), 1 geometry is a line-mesh object, another 1 is an alphed texture quad, attached to a particle Node
b) 2000+ -> 60+ fps with 3000+ made-of-one-geometry particles (3000+ objects), 1 geometry line-mesh, attached to a particle Node

  1. If the bottleneck is in the number of objects, then why does increasing objects count in 2 times (case a vs case b) gives only a slight performance hit (60->30) and not as a huge hit as going from 0 to 3000 objects?

  2. Is this is a limitation of OpenGL, LWJGL or JME? I mean, will the performance be noticeably better on LWJGL or OpenGL?

below are the pictures of explosions (please discard the white rectangles with circles, they are for reference):

Simple particles:
simple particles

Compound particles:
compound particles

Batching.

This is why the JME particle emitter creates just one mesh for all of the particles. The ability to control them individually is not a good argument because those are controlled individually.

2000 visible objects would be a lot for any complete scene. 6000 is just crazy… especially just for an effect.

Each geometry requires things like:
-culling
-send transform to GPU
-send mesh data to GPU
-update all uniforms
-render

Kind of wasteful when the objects are just one or two triangles… the rest of the pipeline dwarfs the rendering cost 100 fold.

You should be able to create the particle mesh as a single mesh from the get go… no matter what you use as a template for the particle.

Take a look at https://wiki.jmonkeyengine.org/legacy/doku.php/jme3:contributions:particles

Source is at Google Code Archive - Long-term storage for Google Code Project Hosting.

You can use the source for inspiration or it should be possible to do your particles entirely using the particles just by setting up the right influencers.

Thank you all very much! I am into exploring what is proposed!