① Find a more efficient way to transform axis-aligned bounding
boxes by taking advantage of the symmetries of the problem: because the
eight corner points are linear combinations of three axis-aligned basis
vectors and a single corner point, their transformed bounding box can be
found more efficiently than by the method we have presented (Arvo 1990).
② Instead of boxes, tighter bounds around objects could be
computed by using the intersections of many nonorthogonal slabs. Extend
the bounding box representation in pbrt to allow the user to specify a
bound comprised of arbitrary slabs.
② The DirectionCone::BoundSubtendedDirections()
method bounds the directions that a Bounds3f subtends from a given
reference point by first finding a sphere that bounds the Bounds3f
and then bounding the directions it subtends. While this gives a valid
bound, it is not necessarily the smallest one possible. Derive an improved
algorithm that acts directly on the bounding box, update the implementation
of BoundSubtendedDirections(), and render scenes where that method
is used (e.g., those that use a BVHLightSampler to sample
light sources). How are running time and image quality affected? Can you
find a scene where this change gives a significant benefit?
① Change pbrt so that it transforms Normal3fs just like
Vector3fs, and create a scene that gives a clearly incorrect image due
to this bug. (Do not forget to revert this change from your copy of the
source code when you are done!)