A Little Bit Of History
Carmack’s experiments with voxels go back further than last year. In fact, his interest goes back some 10 years. Between the Quake/Quake II engines and Quake III, Carmack conducted several experiments with new rendering techniques. He gave all of this research the code name Trinity, which a lot of gamers understood to be a future product and the new generation of 3D engines from id Software. But, in fact, the Quake III engine remained fairly conventional, as Carmack himself revealed in a .plan file dating from 1998:
“Here are some notes on a few of the technologies that I researched in preparing for the Quake3/Trinity engine. I got a couple months of pretty much wide open research done at the start, but it turned out that none of the early research actually had any bearing on the directions I finally decided on. Ah well, I learned a lot, and it will probably pay off at some later time.”
Some of his experiments involved displaying voxel octrees. Here’s what he had to say just after the release of Quake III:
"I did these two voxel engines at the beginning of Quake III and it got to the point where I thought that I could almost make them run in software, but it would be at a fairly low resolution, and compared to what you could do at that speed with hardware polygons, it doesn't pay off in that case," Carmack said. "I did do an analysis of what the memory-access patterns would be and everything; you could do a voxel ray-tracer in hardware with drastically less hardware than what we're actually using right now for all the triangle rasterizers and I think it could be a much more compelling visual representation in a lot of cases.”
That quote is taken from an interview on FiringSquad that dates from early 2000, almost 10 years ago. So, it’s clear that the idea has been turning over in John Carmack’s head for quite some time.
You can’t talk about voxels without mentioning Outcast. The game, which first appeared over 10 years ago in July 1999, impacted an entire generation of gamers thanks to its many qualities, but also because of its highly unusual 3D engine at a time when 3D graphics cards had started to become the rule in gamers’ PCs.
Outcast was based on an all-software rendering engine, which made it especially power-hungry. To play the game at its maximum resolution (an impressive 512x384), you needed a leading-edge processor, but not a 3D graphics card. Its resource-intensiveness wasn't the only reason why this engine made its mark. Its use of voxels also made the game’s rendering truly unique.
But you have to put that into perspective–even if the title has remained (along with the games from Novalogic) a standard bearer of voxel-based rendering, it actually only used a fairly simplified form that was also reserved for the landscape. All the objects and characters were very standard polygonal models. The landscape was based on a height map, which meant that there was only one possible height for each point in the environment, ruling out complex structures like arches.
That limitation wasn’t a deal breaker, since such a structure is fairly rare in nature due to the constraints of physics. Nevertheless, the display of the landscape was fairly simple and was achieved column by column. For each column, a maximum Y value was stored (in a Y-Buffer). The pixels of the column in question were filled in starting at the bottom of the screen, only if their Y value was greater than the one stored in the Y-Buffer. This rendering method made the process of removing non-visible parts of the scene very efficient and very easy.
After that little trip to the past, it’s time to take a look at what voxels might mean to us in the future.