shadows can be drawn any way you want.
- Dungeon siege : characters are drawn black on white background. That makes a texture that is projected and blended on the ground. The simplest and most widely used technique for dynamic shadows. If you can't render to a texture or don't have the speed you can have a predefined shadow texture (usually a blob).
- Quake 3 : shadows are built in the level, calculated with a raytracing solution. Alternatively you can use a radiosity solution as in Max Payne, since nothing has to be calculated on line (except for the simplest blending of the lightmap with the wall diffuse texture). In Quake 3 characters have a simple blob shadow or an alternate technique where each characters is flatened on the ground and drawn in black. It's very efficient if your terrain is flat. If the shadow is not perfectly black you get overdraw artifacts (see following).
- Stencil shadow : instead of drawing black geometry to simulate the shadow as in Quake 3, you can instead drawing transparent shadows by drawing geometry that only sets one bit in the stencil. If the stencil is non zero then it is in shadow and you rerender the background for this specific stencil value or you simply darken the whole screen with a quad that affects only stenciled regions.
- static geometry shadows. It works for static objects and lighting. you cut your objects along the boundaries of shadows and prebake the vertex colors to take into account the lighting. See Animusic demo by ATI. You can also simulate soft shadows at only geometric processing cost. Works good if the lighting conditions are not too complicated and/or you're not geometry processing limited. Of course the shadows do not affect moving objects but that's the same for all prebaked lighting conditions.
- 3dmark05/Splinter Cell : shadowmaps work good for complicated and dynamic lighting conditions (with not too complicated scene configurations). Each scene is rendered from the light point of view in a depth buffer. Then depth is back projected in the scene and compared against current depth to see if you're in shadow or not. Con : Z-Fighting and aliasing can look pretty bad and Depth buffer can be huge. In Splinter Cell, all the shadowed scenes are tuned "by hand" since perspective shadow maps or other techniques are not reasonable on XBox. Before that, it has been popularized by PIXAR (Toy Story). But the constraints are very different (hand tuned lighting, huge buffers with huge precision, huge number of samples per pixels).
- 3dmark03/Doom 3/DeusEx II: for stencil shadow volumes each casting object is stretched alongs its silhouette and then the corresponding volume is drawn against stencil only. increase or decrease when you enter and the reverse when you exit the volume. The volume intersects real geometry and a face is not drawn if it falls behind. This way by looking at the resulting arithmetic overdraw you know immediately if an object was in shadow or not. This is very costly since your screen can be filled by a lot of overlapping volumes and each draw needs to do a read/modify/write of the depth/stencil surface (even with hierarchical Z !).
- Raytraced shadows (not used in any title.. yet): shadow is calculated only once per pixel and per light source. When shading a pixel (or a vertex), the source is checked against all known occluders, if it falls behind, then the source is in shadow. Major inconvenient is that checking the occluders can be very costly and usually pixel shaders don't have access to the scene configuration (only for the simplest setup).
Etc..