② Read the papers by Manson and Schaefer
(2013, 2014) on approximating
high-quality filters with MIP maps and a small number of bilinear samples.
Add an option to use their method for texture filtering in place of the EWA
implementation currently in pbrt. Compare image quality for a number of
scenes that use textures. How does running time compare? You may also
find it beneficial to use a profiler to compare the amount of time it takes
to run texture filtering code for each of the two approaches.
② An additional advantage of properly antialiased image map
lookups is that they improve cache performance. Consider, for example, the
situation of undersampling a high-resolution image map: nearby samples on
the screen will access widely separated parts of the image map, such that
there is low probability that texels fetched from main memory for one
texture lookup will already be in the cache for texture lookups at adjacent
pixel samples. Modify pbrt so that it always does image texture lookups
from the finest level of the MIPMap, being careful to ensure that
the same number of texels are still being accessed. How does performance
change? What do cache-profiling tools report about the overall change in
effectiveness of the CPU cache?
② Read Worley’s paper that describes a noise function with
substantially different visual characteristics than Perlin
noise (Worley 1996). Implement this cellular noise function, and add
Textures to pbrt that are based on it.
③ Read some of the papers on filtering bump maps referenced in the
“Further Reading” section of this chapter, choose one of the techniques
described there, and implement it in pbrt. Show the visual artifacts
from bump map aliasing without the technique you implement, as well as
examples of how well your implementation addresses them.
③ Modify pbrt to support a shading language to allow
user-written programs to compute texture values. Unless you are also
interested in writing your own compiler, OSL (Gritz et al. 2010) is
a good choice.