Another practical way to add detail to a scene is through the appropriate infusion of surface detail. In Radiance, we call a variation in surface color and/or brightness a pattern, and a perturbation of the surface normal a texture. This is more in keeping with the English definitions of these words, but sometimes at odds with the computer graphics community, which seems to prefer the term "texture" for a color variation and "bump-map" for a perturbation of the surface normal. In any case, we have extended the notion somewhat by allowing patterns and textures to be functions not only of surface position but also of surface normal and ray direction so that a pattern, for example, may also be used to represent a light source output distribution.
Our treatment of patterns and textures was inspired by Perlin's flexible shading language , to which we have added the mapping of lookup functions for multi-dimensional data. Using this technique, it is possible to interpret tabulated or image data in any manner desired through the same functional language used for procedural patterns and textures.
Figure 12 shows a scene with many patterns and textures. The textures on the vases and oranges and lemons are procedural, as is the pattern on the bowl. The pattern on the table is scanned, and the picture on the wall is obviously an earlier rendering. Other patterns which are less obvious in this scene are the ones applied to the three light sources, which define their output distributions. The geometry was created with the generator programs included with Radiance, which take functional specifications in the same language as the procedural patterns and textures. The star patterns are generated using a Radiance filter option that uses the pixel magnitude in deciding how much to spread the image, showing one advantage of using a floating-point picture format . (The main advantage of this format is the ability to adjust exposure after rendering, taking full advantage of tone mapping operators and display calibration .)