Recently, I came up with an idea for an efficient cartoon rendering algorithm. Most algorithms I know of use the rather crappy scheme of drawing outlines by darkenning polygons that face almost perpendicular to the view plane. (For an example, see NVidia's graphics demo suite.) My method draws all outlines with pretty much equal thickness, properly outlines sharp edges (even if they aren't on the silhouette boundry), and doesn't require any CPU-intensive runtime processing. The models need a little bit of pre-processing, though, but this only takes a few seconds and only needs to be done once per model, at development time.
So how do I do it? Well, if you don't know already (I don't know if this is a well-known algorithm or not), then you'll just have to wait and find out! :P In the meantime, here's some screenshots. Note that these shots only show the outline-drawing part of the algorithm, not the lighting (which I haven't written yet). Also note that the couple of mis-drawn borders are errors in the model itself, not in my algorithm. ;)
(These shots were taken using a very sloppy prototype of my algorithm. I don't intend to release the code as it would be totally useless for any real purpose.)
These are images from the Asteroids clone which I wrote using GAUGE. The first image was taken on level 1, the second on level 30, and the third on level 50. The fourth image is a shot of me cheating. :) To make that shot, I edited the asteroids config file and set the ship's turn rate and fire rate extremely high (no re-compile required). All four screenshots were rendered at 800x600x32bit w/4xFSAA on an NVidia GeForce 2 in Linux. The framerate was a constant 75fps (vsync was on, so the framerate was limited to my monitor's refresh rate).
These are some shots of the "GAUGE cube", which is my attempt at making a logo for GAUGE. The cube was modeled using 3D Studio Max and rendered in GAUGE.