② Write a program that compares Monte Carlo and one or more
alternative numerical integration techniques. Structure this program so
that it is easy to replace the particular function being integrated.
Verify that the different techniques compute the same result (given a
sufficient number of samples for each of them). Modify your program so
that it draws samples from distributions other than the uniform
distribution for the Monte Carlo estimate, and verify that it still computes
the correct result when the correct estimator,
Equation (13.3), is used. (Make sure that any alternative
distributions you use have nonzero probability of choosing any value of
where .)
① Write a program that computes Monte Carlo estimates of the
integral of a given function. Compute an estimate of the variance of the
estimates by taking a series of trials and using
Equation (13.2) to compute variance. Demonstrate numerically
that variance decreases at a rate of .
① The depth-of-field code for the ProjectiveCamera in
Section 6.2.3 uses the ConcentricSampleDisk() function
to generate samples on the circular lens, since this function gives less
distortion than UniformSampleDisk(). Try replacing it with
UniformSampleDisk(), and measure the difference in image quality. For
example, you might want to compare the error in images from using each
approach and a relatively low number of samples to a highly sampled
reference image.
Does ConcentricSampleDisk() in fact
give less error in practice? Does it
make a difference if a relatively simple scene is being rendered versus a
very complex scene?
② Modify the Distribution1D implementation to use the
adaptive CDF representation described by Lawrence et al. (2005), and
experiment with how much more compact the CDF representation can be made
without causing image artifacts. (Good test scenes include those that use
InfiniteAreaLights, which use the Distribution2D and, thus,
Distribution1D for sampling.) Can you measure an improvement in
rendering speed due to more efficient searches through the approximated CDF?
③ One useful technique not discussed in this chapter is the
idea of adaptive density distribution functions that dynamically change the
sampling distribution as samples are taken and information is available
about the integrand’s actual distribution as a result of evaluating the
values of these samples. The standard Monte Carlo estimator can be written
to work with a nonuniform distribution of random numbers used in a
transformation method to generate samples ,
just like the transformation from one sampling density to another. This
leads to a useful sampling technique, where an algorithm can
track which samples were effective at finding large values of
and which weren’t and then adjusts probabilities toward the effective
ones (Booth 1986). A straightforward implementation would be to split
into bins of fixed width, track the average value of the integrand
in each bin, and use this to change the distribution of samples.
Investigate data structures and algorithms that support such sampling
approaches and choose a sampling problem in pbrt to apply them to.
Measure how well this approach works for the problem you selected.
One difficulty with methods like this is that different parts of the
sampling domain will be the most effective at different times in different
parts of the scene. For example, trying to adaptively change the sampling
density of points over the surface of an area light source has to contend
with the fact that, at different parts of the scene, different parts of the
area light may be visible and thus be the important areas. You may find it
useful to read Cline et al.’s paper (2008) on this topic.