so, I think the problem with the above is that it is in more technical terms.
Shadow Casting Spot lamp Implementation
Zbuffering
Essentially an image is rendered (at a size you specify) from the point of view of the lamp. The process of rendering this image, (and most other opengl images) are about as follows
Calculate where each vertex will appear on the screen (the lamp has it’s own screen)
For each face, calculate the pixels it uses on the screen.
For each of these pixels, store the distance they are from the screen (the zbuffer). Only do this if the distance is less (the pixel is closer) than the one that is already there.
(not for lamps) calculate the colors of the verticies, the lighting, and the textures and apply them to the previous
now each pixel (element if you wish to call it that) of the zbuffer contains the distance of the CLOSEST point on a face.
To the Image Render:
now, when each pixel is rendered, and shadows are enabled, calculations are done to see where the pixel on the screen lies on the screen of the lamp. (imagine a picture of an apple being taken, and calculating where for each point on the apple (say the stem) it appears on a picture taken from another point of view (the lamp)). If the point is closer to or equal with the corresponding point in the lamp’s zbuffer, it is being lit by that lamp. Otherwise it is not.*
The Answer to the question
Since the depth buffer is only so accurate (24 bits, or 16777216 values?), it is quite possible that a pixel will be wrongly in shadow, or wrongly in light. The Bias value will determine the tolerance between the two. I think that it will fade between being in shadow, and not, for values bias/2 distance from the value stored in the depth buffer. If the bias is set lower, it is more likely that something will be improperly lit by a shadow lamp. If it is too high, it is likely that the shadow will not be dark enough, because of the fading I mentioned.
More shadow information:
the zbuffer is not calculated 'from the pov of the lamp to 16777215 units away. It is the distance from clipStart, where 0 is the distance of clipStart, and the highest value is the value of clipEnd.** (in the lamp buttons) To reduce the error more, it is a good idea to have clipStart as high as possible (places closer will be fully lit, and not cast shadows), and clipEnd as low as possible (places further will be in shadow)
UPDATED: … and the Soft setting determines the offset of the different samples. A higer value will spread out the different shadow samples, which will make a softer shadow. It does not (as far as I can tell) make more crisp shadows when the shadow casting object, and the shadow recieving object are closer, and vice versa.
*This is for a single sample (samples: 1), but blender allows multiple samples in about a N by N grid where N is the number of samples. EIther way, the edge of each sample is always aliased. Oh, when you have multiple samples, they must all overlap to be complete shadow (not lit by the lamp). The opactiy of each shadow sample is 1 divided by the total number of shadow samples.
** I may be wrong and have reversed the direction of the zbuffer. This really only matters to the programmer, which must get the ‘closer’ ‘farther’ relationship correct.