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