① The functionality of the SpotLight could be
replicated by using a suitable image in conjunction with the
ProjectionLight or GoniometricLight. Discuss the advantages
and disadvantages of providing this specific functionality separately with
the SpotLight class.
② Modify the ProjectionLight to also support
orthographic projections. This variant is particularly useful even without
an image map, since it gives a directional light source with a beam of
user-defined extent.
③ The current light source implementations do not support
animated transformations. Modify pbrt to include this functionality and
render images showing off the effect of animating light positions. Note
that if you would like to use the BVHLightSampler with animated light
sources, it will require substantial modifications.
② Implement an area light that generalizes
the DiffuseAreaLight to support directionally varying emitted
radiance. You might, for example, allow focusing the light by computing
the cosine of the outgoing direction and the surface normal and raising it
to some power. Derive a model such that the total power of the light is
left unchanged as the directional distribution of emitted radiance varies
and update the light’s SampleLe() methods for sampling rays leaving
the light to account for the emission distribution. Discuss the
implications of your approach for sampling via SampleLi(); should
that method be aware of the changed directional distribution?
② Read some of the papers in the “Further Reading”
section that discuss the shadow cache, and add this optimization to pbrt.
Measure how much it speeds up the system for a variety of scenes. What
techniques can you come up with that make it work better in the presence of
multiple levels of reflection?
② One of the advantages of the linearity assumption in
radiometry is that the final image of a scene is the same as the sum of
individual images that account for each light source’s contribution
(assuming a floating-point image file format is used that does not clip
pixel radiance values). An implication of this property is that if a
renderer creates a separate image for each light source, it is possible to
write interactive lighting design tools that make it possible to quickly
see the effects of scaling the contributions of individual lights in the
scene without needing to re-render it from scratch. Instead, a light’s
individual image can be scaled and the final image regenerated by summing
all the light images again. (This technique was first applied for opera
lighting design by Dorsey, Sillion, and Greenberg
(1991).) Modify pbrt to output a separate image
for each of the lights in the scene, and write an interactive lighting
design tool that uses them in this manner.
③ Read the paper by Velázquez-Armendáriz
et al. (2015), and implement their method
for efficiently rendering scenes with complex light sources. Create or find
models of a few complex lights that include many shapes that exhibit specular
reflection or transmission in order to evaluate your implementation.
② Generalize the PortalImageInfiniteLight to allow
the specification of multiple portals. Note that multiple coplanar
portals can be supported without resampling the environment map, but
non-coplanar portals will require multiple copies of it. As noted by
Bitterli et al. (2015), the summed area table representation
makes it easy to compute the total power passing through a portal given a
receiving point. Modify your implementation to use the relative power of
multiple portals as a sampling distribution to choose which portal to
sample. Render images that show the benefit of this improvement.
② Sampling wavelengths according to the XYZ matching
functions is a reasonable approach for many scenes, though if the light
sources in the scene have highly peaked spectra (as, for example, many
fluorescent lights do), error may be reduced by instead sampling
wavelengths according to the lights’ spectral distributions. Implement
this approach and compare the results to pbrt’s current wavelength
sampling implementation using a variety of spectral emission profiles.
How much does the alternative sampling strategy help in the best case
versus the worst case? Can you find a way to improve the results further
by applying multiple importance sampling?
③ The BVHLightSampler is missing a number of features in
the BVH sampling scheme described by Conty Estevez and Kulla (2018),
including an importance factor specialized for participating media and
adaptive splitting, where multiple lights may be returned from the sampling
operation when it is difficult to determine which child node is a better
choice at the upper levels of the tree. Read their paper and improve pbrt’s
implementation. What is the change in Monte Carlo efficiency? Does the
reduction in error justify the increase in computation?
③ Another shortcoming of the current BVHLightSampler
implementation is that it does not account for the BSDF at the reference
point but instead effectively assumes a diffuse surface. Read the paper by
Liu et al. (2019b) and improve the BVH light sampler’s
implementation by using their approach to account for this factor. Measure
the change in MSE for a variety of scenes with this improvement.