Final Project Report
CSS 552 – Prof. Sung
Daniel R. Lewis
June 10, 2013
In ray tracing, a ray is sent through an image pixel and intersects with the nearest geometric surface. If that surface is textured, the texture must be sampled to produce a value (mostly commonly a color) for the pixel. The easy default solution is point sampling, simply picking the texel (texture pixel) which happens to be at the intersection position. However, when the texture is "minified" (i.e., each pixel projection covers multiple texels) and contains high-frequency information, point sampling can result in undesirable aliasing. The ideal solution would be to average all the texels covered by the pixel, but since this is too expensive to do exactly, we approximate via one of a number of techniques.
Other than point sampling, the four most important techniques are mipmapping, ripmapping, summed-area tables, and unconstrained anisotropic filtering. For a good introduction to these techniques, see Akenine-Moller et al. (2008). See the references section for a full citation and further reading.
For my CSS 552 final project, I implemented mipmapping and summed area tables (SATs). In the next section, we will look at the results produced by these techniques, as well as point sampling.
Sampling this texture (note: rotated to have the same orientation as the rendered image, same for the rest). For the point sampled image, note the left "stripe" that does not exist in the original texture. Both mipmapping and SATs do better, but the latter is superior. This example was contrived to show mipmapping at its best.
Point | Mipmap | SAT |
![]() |
![]() |
![]() |
Sampling this texture. Point sampling results in severe aliasing in the far corner, and mipmapping does little better: its aliasing is similar until it rapidly transitions into a blur. SAT does best, but has obvious "ripples", called a moiré pattern. SAT also eliminates the "jaggies" on the nearby checker patterns; we will discuss why in Example 5.
Point | Mipmap | SAT |
![]() |
![]() |
![]() |
Sampling this texture.
Point | Mipmap | SAT |
![]() |
![]() |
![]() |
Sampling left, center, right. This is the only example with non-contrived textures. The effects of antialiasing are still noticeable. The difference with the water lilies is the most obvious. Mipmapping was omitted from this example since it requires textures to have 2n by 2n pixels, which these do not.
Point | SAT |
![]() |
![]() |
SAT sampling works by constructing a bounding box around the pixel footprint and sampling at the corners. As I mentioned in my talk, the edges of the bounding box will fall between texel boundaries.
At left, we see the result of truncating the boundaries to integers. At right, interpolating between the two nearest texel bounaries. The latter method substantially improves quality. It reduces the moiré in the distance, and it smooths away the jaggies when and where the texture is magnified.
SAT (no interpolation) | SAT (interpolation) |
![]() |
![]() |