Particles aplenty!  We want em!  We all know that away3d can only
render a few hundred objects when rendered individually due to the
fact that there is a massive overhead in setting up matrix transforms
for each and every particle in a system when calling drawtriangles for
them all separately, one at a time.  Hence all the "merge" hacks etc.

I have an idea that should allow mega complex particle systems if
nearly infinite numbers of polies.  One possible solution would be to
create a specialized vertex buffer for the entire particle system.
For example, create a 10,000 poly "mesh" with vertex buffer data as
follows: x1,y1,z1,x2,y2,z2 meaning the motion of the sprite is pre-
calculated and stored in the vertex buffer itself.  Then send a delta
value as a vertex buffer constant register that varies from 0..1 over
time and each frame you render the mesh have your AGAL vertex program
interpolate the x,y,z position of each vertex from the starting to the
ending position.  So each vertex smoothly moves from the first to the
second position.  This is similar to how md2 and md5 "bones"
animations are being done.

With this technique, all particle system animation would be handled on
the GPU with virtually no rendering overhead for animation of gigantic
particle systems.  Why?  The entire thing is rendered in ONE draw
call.  Essentially you are "precalculating" the entire animation for
your explosions, etc.  No worrying about each and every sprite in an
explosion, you just draw the whole group at once and get the GPU to do
all the heavy lifting.

Let me know what you think of this idea.  I'm planning to dive in and
implement it next week.  I'll be sure to share my results in 7-10
days.  Words of encouragement or naysayers are warmly welcomed.  I
want to know what you think.

Reply via email to