Ok, kudos to Uma and Kelvin for helping me work through this one!
Thank you, thank you.

Here is a short explanation of what we are doing and the results.

We implemented a "Particle System" (I prefer Manager, it's not really a system) in Java3D.
Our first attempt was simple using TransformGroups, Shape3D's and behaviors for every particle object.
This works, but of course, is way to slow.  However, it is no too slow because of Java3D or something else, it is simply because using many Transforms and Behaviors is going to be expensive.

In gaming, a particle system is usually two classes may be even one, the particle, and the particle updater or manager.
We reviewed several straight OpenGL and D3D particle systems before implementing our second system.  All of the systems we found only use a Quad or TriStrip for each particle.  When that is the particle's geometry, optimizations can be set up to take advantage, so only TWO full vector transformations need to be computed for the entire system to be "BillBoarded" correctly.  So we knew we would try this technique using no TransformGroups, one Shape3D, and one Behavior.  To do it right we needed to get as close to the GL_TRIANGLE level that we could in Java3D.  With help from Uma and Kelvin, we have implemented two different version, one using the direct set methods in GeometryArray and one using the by-ref mode of GeometryArray.

First off all, both methods where orders of magnitude faster than the multiple TransfromGroup/Shape3D/Behavior method.  We still had some rendering problems, but that is practically fixed in the pre-beta.
Second, once the by-ref method was up and running we got another 100% increase in frame rate (for our particular particles test case anyway and on a GeForce H/W T&L).  Needless to say it was much faster and looks great!

Now making a particle system like this is not nearly as versatile as the full TransfromGroup/Shape3D/Behavior system.  It can only do billboarded and usually alpha textured quads.  This is the classic particle engine in games.  Sometimes you need real geometry that had independent rotation, etc.  I call that Debris (from my simulation days)  so we are planning to keep the original system and improve it to complement the particle system when that kind of look is wanted.

I attached a picture for fun.
For those interested, I plan on writing all of this up more formally with code and benchmarks soon.

--
___________________________________________________________

Shawn Kendall               Full Sail Real World Education
Course Director             3300 University BLVD
Real Time 3D for Gaming     Winter Park FL 32792
[EMAIL PROTECTED]       http://www.fullsail.com
___________________________________________________________
 

JPEG image

Reply via email to