TITLE: Minnows NAME: Michael Devine COUNTRY: Canada EMAIL: devine@ugrad.cs.ualberta.ca TOPIC: Creatures COPYRIGHT: I SUBMIT TO THE STANDARD RAYTRACING COMPETITION COPYRIGHT. MPGFILE: minnows.mpg ZIPFILE: minnows.zip RENDERER USED: POV-Ray 3.1 TOOLS USED: Turbo C, CMPEG, PSP for title screen CREATION TIME: 1 day on algorithm, 2 days programming, 3 days tweaking. Rendering took about 18 hours. ANIMATION DESCRIPTION: A school of fish gathers and swims off. DESCRIPTION OF HOW THIS ANIMATION WAS CREATED: A C program calculates the positions of the fishes for each frame, and prints out a POV file. The basic algorithm is for each fish to maintain an "optimal" distance between itself and several neighbors (10 in the case of this animation), by accelerating towards or away from each of those neighbors. One detail is that the fish choose their closest neighbors at the start and concentrate only on those, and if other fish swim closer they're ignored. This wasn't the way it was planned, but when the fish always choose their nearest neighbors, they quickly got into a fairly regular formation and stayed that way. I was working on adding complex darting movements (which didn't work), but I found that simply not updating the list of close neighbors resulted in a lot of darting movement as a side-effect. It's surprising to have something you think is too simple, and then to get more interesting behavior by making it even simpler. The only thing that is random is the initial position of the fish (a few frames before the start of this mpeg). They don't even start with an initial velocity... ALL of the motions of the minnows comes from each trying to maintain a distance to its neighbors. I didn't think of putting in a speed or acceleration limit until now, but there are some pretty bad speed changes in some places. The fish are represented in C as points (located in the center of their heads). Their bodies are basically pointed in the opposite direction as their velocity vectors (with their tails lagging behind, time-wise). In Pov-Ray they're modelled using two truncated cones, with 3 spheres to round the corners off. This looks bad when they're close to the camera, which has a stationary position in this animation. The scenes have 160 fish, plus a ground plane, and fog. Originally I wanted to do a pair of jelly fish tracked by a camera, which is lead to a school of fish (and maybe a diver!). Then maybe a scene with some dolphins. I'd call it "Sea Creatures". I didn't know how out of my league that was until I started (working first on a fish school algorithm, of course). I decided to just try the fish at first, and I planned to write the program, then model the fish in polygons (texture mapped with real photos of fish), then model some complex fish body movement, _then_ worry about throwing in other creatures. But I did an early test rendering, using the "Basic Ready-Made Scene" background and metallic cylinders for fish, and I liked the way it looked so much (especially the sky-sphere looking sort of like the surface of a very bright, clear lake) that I decided to go for a minimalist thing and keep it as close to that early rendering as possible (thus, no water surface etc was modelled). The basic look of the final product is very similar, but I've spent ages since, it seems, just messing with the stupid little details.