② To further improve efficiency, Russian roulette can be
applied to skip tracing many of the shadow rays that make a low
contribution to the final image: to implement this approach, tentatively
compute the potential contribution of each shadow ray to the final overall
radiance value before tracing the ray. If the contribution is below some
threshold, apply Russian roulette to possibly skip tracing the ray.
Measure the effect your scheme has on Monte Carlo efficiency for a number
of test scenes.
② Read Veach’s description of efficiency-optimized Russian
roulette, which adaptively chooses a threshold for applying Russian
roulette (Veach 1997; Section 10.4.1). Implement this algorithm in
pbrt, and evaluate its effectiveness in comparison to manually setting
these thresholds.
② If a scene has an object with a material that causes all
but one of the wavelengths in SampledWavelengths to be terminated
(e.g., due to dispersion), then rays may often
undergo a number of scattering events before they hit such an object. In
pbrt’s current implementation, the path’s radiance estimate is divided by the
wavelength PDF values once, in the PixelSensor::ToSensorRGB() method.
An implication of this design is that all the lighting calculations
along the path are affected by the termination of wavelengths, and not just
the ones after it happens. The result is an increase in color noise in
such images.
Modify one or more integrators to instead perform this division by the
current set of wavelength PDFs each time the radiance estimate being
calculated is updated and not in PixelSensor::ToSensorRGB(). Verify
that the same image is computed for scenes without wavelength termination
(other than minor differences due to round-off error). Is there any change
in performance? Find a scene where this change improves the result and
measure the reduction in MSE.
② Measure how much time is spent in Monte Carlo evaluation
in the BSDF::rho() method when VisibleSurfaces are being
initialized in the PathIntegrator. Do so for both simple and complex
scenes that include a variety of BSDF models. Then, improve the BSDF
interface so that each BxDF can provide its own rho()
implementation, possibly returning either an approximation or the
closed-form reflectance. How much does performance improve as a result of
your changes?
③ Implement a technique for generating samples from the
product of the light and BSDF distributions; see for example the papers by
Burke et al. (2005), Cline et al. (2006),
Clarberg et al. (2005), Rousselle
et al. (2008), and Hart et al. (2020).
Compare the effectiveness of the approach you implement to the direct
lighting calculation currently implemented in pbrt. Investigate how scene
complexity (and, thus, how expensive shadow rays are to trace) affects the
Monte Carlo efficiency of the two techniques.
② Clarberg and Akenine-Möller
(2008b) and Popov et al. (2013) both
described algorithms that perform visibility caching—computing and
interpolating information about light source visibility at points in the
scene. Implement one of these methods and use it to improve the direct
lighting calculation in pbrt. What sorts of scenes is it particularly
effective for? Are there scenes for which it does not help?
③ Modify pbrt so that the user can flag certain objects in
the scene as being important sources of indirect lighting, and modify the
PathIntegrator to sample points on those surfaces according to
to generate some of the vertices in the paths it generates. Use
multiple importance sampling to compute weights for the path samples,
incorporating the probability that they would have been sampled both with
BSDF sampling and with this area sampling. How much can this approach
reduce variance and improve efficiency for scenes with substantial indirect
lighting? How much can it hurt if the user flags surfaces that
make little or no contribution or if multiple importance sampling is not
used? Investigate generalizations of this approach that learn which
objects are important sources of indirect lighting as rendering progresses
so that the user does not need to supply this information ahead of time.
③ Implement a path guiding algorithm such as the one developed
by Müller and collaborators (Müller et al. 2017;
Müller 2019) or Reibold et al. (2018). How
much does your approach reduce error for scenes with highly varying
indirect lighting? What is its effect on scenes with smoother lighting?