Lightmap

[1] Before lightmaps were invented, realtime applications relied purely on Gouraud shading to interpolate vertex lighting for surfaces.

Discontinuity meshing was sometimes used especially with radiosity solutions to adaptively improve the resolution of vertex lighting information, however the additional cost in primitive setup for realtime rasterization was generally prohibitive.

Smaller lumels yield a higher resolution lightmap, providing finer lighting detail at the price of reduced performance and increased memory usage.

Modern 3D packages include specific plugins for applying light-map UV-coordinates, atlas-ing multiple surfaces into single texture sheets, and rendering the maps themselves.

An additional consideration is the use of compressed DXT textures which are subject to blocking artifacts – individual surfaces must not collide on 4x4 texel chunks for best results.

In all cases, soft shadows for static geometry are possible if simple occlusion tests (such as basic ray-tracing) are used to determine which lumels are visible to the light.

The two techniques may be combined, e.g. vertex color values stored for high detail meshes, whilst light maps are only used for coarser geometry.

Cube with a simple lightmap (shown on the right).