codersnotes

Papers, please February 15th, 2009

Since computer graphics was invented by Jim Blinn back in the 70's, there's been quite a lot published on it.

Unfortunately, as 3D graphics have only become real-time in recent years, a lot of the really good stuff was published back when the field was very small. As a result much of it has gone unnoticed to the younger up-and-coming graphics community today.

So here's a collection of highly useful things, found by trawling old SIGGRAPH archives and suchlike.
Note: Some of these may link to the ACM website, which is unfortunately members only. I recommend anyone serious about graphics programming should get an ACM subscription, as although a bit of a rip-off, it's back-catalogue of papers is just too good to pass up. I've tried to find non-ACM links for you where possible.

Classic Historical Papers

Texture and reflection in computer generated images (1976)

This is where they invented texture mapping and environment maps.

Models of light reflection for computer synthesized pictures (1977)

Although often referred to as Cook-Torrance shading, it was in fact first used for CG by Jim Blinn four years earlier. However the later paper is also worth reading, if nothing else than for it's invention of ambient occlusion 20 years earlier than previously thought (top-left of page 309).

Clipping using homogenous coordinates (1978)

How to clip using 4D coordinates. Most proper clippers run using this method.

Casting curved shadows on curved surfaces (1978)

How shadow buffers work. Hasn't really changed in 30 years.

Simulation of wrinkled surfaces (1978)

Jim Blinn invents bump mapping.

A tutorial on compensation tables (1979)

How gamma correction works, as explained by the legendary Ed Catmull.

On visible surface generation by a priori tree structures (1980)

Invention of BSP trees. Actually there's a couple of earlier papers, but this is the one that brings it all together.

Light reflection functions for simulation of clouds and dusty surfaces (1982)

Jim Blinn (again) derives an analytical model for volumetric fog and clouds.

Pyramidal parametrics (1983)

How to mipmap a texture.

Particle systems – A technique for modeling a class of fuzzy objects (1983)

A landmark paper, that not only describes how to write a particle system, including particle super-systems, motion blur, shows pictures from the world's first entirely computer-generated movie sequence, but manages to top it all off by being used for the rather good Wrath Of Khan.

Distributed ray tracing (1984)

Demonstrates how many integration-based effects (DOF, motion blur, anti aliasing, etc) can all be achieved using the same method of supersampling, without having to special-case them. Also famous for it's classic 1984 image.

Summed-area tables for texture mapping (1984)

A rather interesting technique, useful for all sorts of things. Basically it shows how to get the total (or average) for any arbitrary rectangular area, by just reading from 4 points on a texture.

Modeling the interaction of light between diffuse surfaces (1984)

Or, as it's known nowadays, radiosity. A landmark step that took CG from being spheres and chessboards into the realm of images that actually look realistic. They use what's know referred to as the Cornell Box to test their results with. The coolest thing about this paper (which isn't often mentioned) is the box is an actual real box, which they built and put under a very careful lighting setup. They then took photos and measurements to compare against the CG model.

Shade Trees (1984)

Oh wow. This paper is fantastic. They describe a programming language for shaders (which became the RenderMan Shading Language and morphed into HLSL/Cg). There's a mention of dot-3 normal mapping in there, and they finish off with the legendary image Road To Point Reyes. (which incidentally, is there a video of? If anyone can get me one, I'll basically have their children)

Compositing digital images (1984)

Everything you know about alpha blending is wrong. No, seriously. If you've ever tried to render out a semi-transparent image, with the intention of later being able to blend it onto something, you may have found yourself having to read this paper. If you've ever noticed dark edges around DXT1 alpha textures, you may want to brush up on this. Ever had to fill in color values even though the alpha was zero, because it somehow filtered through? You get the idea.

Visual simulation of clouds (1985)

I love this paper. Gardner shows a cheap way of rendering clouds (much cheaper than slicing into volumes or anything), which looks pretty good and can be implemented entirely in a pixel shader. I've used this in real-time and I recommend it heartily.

An image synthesizer (1985)

The classic Perlin noise paper. Like they say, just blur and add noise.

Approximate and probabilistic algorithms for shading and rendering structured particle systems (1985)

You have to read this, it's awesome. Not that it introduces anything especially new or revolutionary, but just to see how they procedurally built up this whole forest. Also this introduces a novel analytical approach for shadowing/AO inside trees, which has been much referenced since.

A simple model of ocean waves (1986)

A really nice model for simple waves. It introduces to CG what's referred to as a Gerstner wave, which you can think of as a fancy sine wave. The latter section talks about how to make the waves adapt to the shoreline and suchlike, but most people ignore that part; which is a shame as it's quite good. Also see it's spiritual companion paper, which was published the same year by D. Peachey, and covers many similar topics.

The rendering equation (1986)

As the authors themselves admit, there's nothing technically novel in here, but they're just formalizing what everyone was already doing. For me, the key insight here is that they're not making any differentiation between light hitting a camera and light hitting a surface – thus meaning any photorealistic renderer has to deal with the idea of global illumination and light bouncing around.

Ray tracing complex scenes (1986)

This paper describes the k-DOP (although they didn't call it that then). It's basically a form of convex hull, but because they align the planes to pre-determined axes, you can do a lot of the ray intersection work only once per ray, rather than for each collision plane. Nice.

Rendering antialiased shadows with depth maps (1986)

Shows how to use Percentage-Closer Filtering to anti-alias shadow maps. But the coolest thing about the paper is simply that they show you a whole bunch of stuff from Luxo Jr. It's kind of interesting to note that the resolutions they were using back then have now been exceeded by real-time games.

Written by Richard Mitton,

software engineer and travelling wizard.

Follow me on twitter: http://twitter.com/grumpygiant