This is a technique for making softer shadows when doing shadow mapping. It works by filtering the result of the depth comparison. So when comparing a depth, some depths around should also be compared and the result should be averaged. This will give a softer look on the shadow edges.
It can be implemented as simple as this in a the pixel shader:
float result; result = shadow2DProj(shadowMap,texCoord+offset); result += shadow2DProj(shadowMap,texCoord+offset); result += shadow2DProj(shadowMap,texCoord+offset); result += shadow2DProj(shadowMap,texCoord+offset); result /= 4.0; // now result will hold the average shading
The samples are often either taken in a grid-based square around the original sample location or randomly scattered around it.
NVIDIA has built in hardware support for doing bilinear interpolation between four samples.
ATI has fetch4 which will fetch four texture samples at the same time.
The original paper for PCF:
A technique that is similar (percentage-closer soft shadows)
A paper including lot’s of shadow mapping information, including different ways to do PCF (the image in this article is borrowed from this presentation):