To Do
If anyone would like to do one of these, go for it! I might get to them eventually.
API
- Use Nvidia's CUDA library to do the particle computation on the GPU
- Bouncing off multiple nearby or intersecting domains is broken (see Waterfall).
- Bounce off inside PDBox domain
- Make the API more generic so many API calls can apply to any different attribute.
Make attributes generic.
- Use SSE better. Requires a new four-element pVec class. I implemented this and rewrote
the Move() action in SSE. The inner loop came out to 8 instructions. However, the
code is ugly and I had trouble getting the alignment of particles in STL vectors
to obey the alignment constraint of SSE.
- Optimize compiled action lists by combining calls: fountain 17.21 fps optimized
vs. 5.1 fps not.
- Make actions conditional on domains.
- Compound domains (so you can define a whole model as a single domain instead of
a zillion triangle domains). This may be the answer for obstacle avoidance.
- Have a secondary color for each particle.
- DensityColor - color is f(density)
- PositionColor - color is f(position)
- RandomColor - random domain is added to color
- VelocityColor - color is f(velocity)
- VelocitySize - size is f(velocity)
Demos
- Environment reflected water drops
- Make demos that use a wider variety of actions
- Demo where you put particles all over the surface of a statue, explode the statue,
and then suck the particles back to the original position.
- Toggle creation/killing of particles for all effects so the Snake doesn't kill them,
etc.
- Make an actual Windows screensaver.
- Integrate Boids into Effects.cpp.
Documentation