So let's take a few moments to formally define what a silhouette map is.
As I mentioned earlier, silhouette maps were first introduced at SIGGRAPH
last year as a way to address the aliasing artifacts of shadow maps. We
noted in that work that the jagged artifacts of shadow maps occur at shadow boundaries.
By explicitly storing the position of these boundaries in a silhouette map,
we were able to reconstruct these boundaries correctly and thus
produce a shadow that more closely resembled the true shadow.
Silhouette maps store this information by storing the xy coordinates
of points that lie on the discontinuity edges.
The sample values, which
in the case of the shadow maps were scalar depth values, are located in the
corners of the silhouette map texels. In texture magnification, these
samples will be the RGB color values. Thus the silhouette map and the standard
texture are offset by 1/2 pixel in x and y relative to each other.
Finally, every cell in the silhouette map contains one and only one point.
This is because our reconstruction algorithms require each silhouette point to
have 4 valid neighbors. The fact that we store no more than one point makes
our algorithm fast and efficient, requiring a constanttime lookup for each
sample.
