The vertex shader
The vertex shader is analogous to the transformation and lighting unit in previous GeForce chips, except it's been injected with elasticity.

Stick with me here. Here's what I mean. In the past, 3D cards were capable of rendering static 3D objects, or of rendering models with very simple joints. This is why Quake II is populated by mutant robots: mutant robot joints are easy to animate in 3D. There's a blocky torso, and then there's a simple, hinge joint on which an arm or leg is connected. It all looks very mechanical and not at all organic, so hey, the bad guys are robots!

Then along came the first-gen T&L-capable cards, the GeForce line and the Radeon, which promised, well, faster robot joints and even more frantic mechanical hinge action. These cards also included some basic facilities to get beyond such rudimentary animation—especially the Radeon—but such features weren't widespread or capable enough to win support from developers. So it didn't happen.

The GeForce3 changes all that by sporting a programmable vertex shader. With this chip, developers can write programs to control the motion of polygon meshes, define how they interact with one another, and create organic-looking real-time animation.

But why call it a vertex shader? Vertices are the points at the intersections of the lines in triangles. Each triangle has three vertices. Vertices are also the basic pieces of information a computer uses to keep track of 3D objects. Each of these little points carries with it a lot of information, from color information to its coordinates in 3D space to special things like transparency info. The vertex shader manipulates vertex data in concert, calculating how a mesh of polygons will move and bend together, and how light sources will influence the color and intensity of those vertices.

So it handles vertices, and it calculates lighting. Hence the term "vertex shader." It does a lot more than just apply shading to vertices, but what can ya do? That's what NVIDIA likes to call it.

The vertex shader does have its limitations. For instance, it's no help washing the dishes. More immediately, the vertex shader can't add or subtract polygons; it only manipulates the polygons that are there. But the vertex shader is a programmable, reconfigurable part of the GeForce3 graphics processor. It can be made to perform wacked-out deformation effects, like bullets denting metal, or the all-important animation of organic, 3D models with skin and muscles stretched over virtual skeletons. Or whatever else those devious graphics guys can think up. Developers will be able to write low-level programs to run on this high-level bit of hardware, directly controlling how graphics operations will be computed.

So graphics guys are going to be sounding more and more like CPU geeks, complaining about the number of registers available to them or other esoteric things. But the effects they create will be mind-blowing.

The pixel shader
The pixel shader, on the other hand, handles per-pixel lighting duties. Its precursor was the GeForce-series' shading rasterizer with its nifty register combiners. I got all weepy over register combiners right here and especially here when writing my GeForce2 review. Click through if you want to know what they were all about. And bring a tissue.

The pixel shader is an evolved version of GeForce's shading rasterizer. If your eyes didn't glaze over reading about the vertex shader above, congrats. You probably know that the vertex shader handles lighting, or shading, of vertices. So basic lighting is taken care of before pixel shaders come into the picture. What the pixel shader does is—you guessed it—shade pixels.

Per-pixel lighting augments the lighting calculated by the vertex shader by allowing each pixel's color to be altered by a number of different effects. Pixel shader effects are created through the creative application of textures to polygons. Basic texture mapping is used everywhere in 3D now; wrapping pictures around polygons is a foundation of 3D as we have known it. What pixel shaders do is allow textures to be used to generate a range of effects. Some of these effects are familiar and well defined: dot-product bump mapping, for instance. Others haven't even been dreamed up yet.

The math involved in applying some of these individual effects at the pixel level—of applying a texture to a pixel using a certain formula and spitting out the results—is usually relatively simple floating-point math. The cumulative results of applying a number of these effects at once can be breathtaking. Taken to an extreme, pixel shader effects theoretically could produce just about any effect one might want. Adding reflectivity, glossiness, bumpiness, or recreating the effects of LSD without all the harmful side effects—it's all possible.

In reality, though, these pixel shaders have some substantial shortcomings. GeForce3's pixel shaders are extended versions of NVIDIA's register combiners; they're definitely improved in the some important ways, but they aren't yet flexible enough to fulfill the full promise of the pixel shader concept. (See John Carmack's comments on the subject here.) Internal restrictions will limit the effects developers can create.

Also, the pixel shaders can only apply so many textures per rendering pass. In this case, the GeForce3 maxes out at four textures per pixel without resorting to another pass (additional passes harm performance). That's more than the GeForce2 (two textures per pixel) or the Radeon (three). NVIDIA's new baby is more flexible in applying those textures than either of those chips, too, but four textures per pass is a limitation.

In these and other areas, there's room for improvement in future products.