I am taking a seminar course on motion in video games this semester. Besides showing me more details of a lot of techniques I’ve seen used when I play games, it gives me motivation to try out things I might not normally do when I’m tinkering away on Ferox trying to improve performance. (And as a side note, don’t ever optimize early; it’s just a huge, addicting waste of time that’s a lot of fun.)
The first assignment for the course was due recently and I had the chance to implement a particle system in Ferox. A lot of the code turned out to be pretty straight-forward especially since I wasn’t too worried about performance. My submission can be found here where you can also download a video of the animations, which is much more compelling than looking at the static images.
It was interesting to see the different performances characteristics between my laptop’s integrated card and its dedicated, Nvidia card. The Nvidia card had much better filtrate so it could scale easily to 50,000 billboarded quads. At that point, both blending on the GPU and depth-sorting on the CPU became bottlenecks. Particle that emit light (such as fire) don’t need to be depth-sorted, so it’s possible to render even more than 50,000 before hitting unacceptably low frame rates.
This was probably one of the most enjoyable assignments I’ve ever done because it combined graphics programming, performance, and art into a single assignment. It also did not provide any foundation code so everything had to be done from scratch. It’s a pet peeve of mine when classes give us starting code to work from because I think it hinders my understanding of everything I’m trying to accomplish with the final program.
That griping aside, I’m looking forward to continuing with this class and hopefully it will give me the chance to work on character animations and other advanced things like that. If I’m a little masochistic, I might even try to build a Euphoria like system for my final project.