② If the same Texture is bound to more than one component of a
Material (e.g., to both PlasticMaterial::Kd and
PlasticMaterial::Ks), the texture will be evaluated twice. This
unnecessarily duplicated work may lead to a noticeable increase in
rendering time if the Texture is itself computationally expensive.
Modify the materials in pbrt to eliminate this problem. Measure the change in the system’s
performance, both for standard scenes as well as for contrived scenes that
exhibit this redundancy.
② Implement the artist-friendly “Disney BRDF” described
by Burley (2012). You will need both a new Material implementation
as well as a few new BxDFs. Render a variety of scenes using your
implementation. How easy do you find it to match the visual appearance of
existing pbrt scenes when replacing Materials in them with this
one? How quickly can you dial in the parameters of this material to
achieve a given desired appearance?
③ One form of aliasing that pbrt doesn’t try to eliminate is
specular highlight aliasing. Glossy specular surfaces with high specular
exponents, particularly if they have high curvature, are susceptible to
aliasing as small changes in incident direction or surface position (and
thus surface normal) may cause the highlight’s contribution to change
substantially. Read Amanatides’s paper on this topic (Amanatides 1992)
and extend pbrt to reduce specular aliasing, either using his technique
or by developing your own. Most of the quantities needed to do the
appropriate computations are already available— and in the
SurfaceInteraction, and so on—although it will probably be
necessary to extend the BxDF interface to provide more information
about the roughness of any MicrofacetDistributions they have.
②
Another approach to addressing specular highlight aliasing is to
supersample the BSDF,
evaluating it multiple times around the point being shaded.
After reading the discussion of supersampling texture functions in
Section 10.1, modify the BSDF::f() method
to shift to a set of positions around the intersection point but
within the pixel sampling rate around the intersection point and evaluate
the BSDF at each one of them when the BSDF evaluation routines are called.
(Be sure to account for the change in normal using its partial
derivatives.) How well does this approach combat specular highlight
aliasing?
③ 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 both the visual artifacts
from bump map aliasing without the technique you implement as well as
examples of how well your implementation addresses them.
③ Neyret (1996, 1998), Heitz and Neyret (2012), and Heitz et al. (2015) developed
algorithms that take descriptions of complex shapes and their
reflective properties and turn them into generalized reflection models at
different resolutions, each with limited frequency content. The advantage
of this representation is that it makes it easy to select an appropriate
level of detail for an object based on its size on the screen, thus
reducing aliasing. Read these papers and implement the algorithms
described in them in pbrt. Show how they can be used to reduce geometric
aliasing from detailed geometry, and extend them to address bump map
aliasing.
③ Use the triangular face refinement infrastructure from the
Loop subdivision surface implementation in Section 3.8 to
implement displacement mapping in pbrt.
The usual approach to
displacement mapping is to finely tessellate the geometric shape and then
to evaluate the displacement function at its vertices, moving each vertex
the given distance along its normal.
Refine each face of the mesh until, when projected onto the image, it is
roughly the size of the separation between pixels. To do this, you will
need to be able to estimate the image pixel-based length of an edge in the
scene when it is projected onto the screen. Use the texturing
infrastructure in Chapter 10 to evaluate displacement
functions. See Patney et al. (2009) and Fisher et al. (2009) for
discussion of issues related to avoiding cracks in the mesh due to adaptive
tessellation.