② Replace ratio tracking in the
VolPathIntegrator::SampleLd() method with delta tracking. After you
confirm that your changes converge to the correct result, measure the
difference in performance and MSE in order to compare the Monte Carlo
efficiency of the two approaches for a variety of volumetric data sets. Do
you find any cases where delta tracking is more efficient? If so, can you
explain why?
②Residual ratio tracking can compute transmittance
more efficiently than ratio tracking in dense media; it is based on finding
lower bounds of in regions of space, analytically computing that
portion of the transmittance, and then using ratio tracking for the
remaining variation (Novák et al. 2014). Implement this approach in pbrt and measure its effectiveness. Note that you will need to make
modifications to both the Medium’s RayMajorantSegment
representation and the implementation of the VolPathIntegrator in
order to do so.
② The current implementation of SampleT_maj()
consumes a new uniform random value for each RayMajorantSegment
returned by the medium’s iterator. Its sampling operation can
alternatively be implemented using a single uniform value to sample a total
optical thickness and then finding the point along the ray where that
optical thickness has been accumulated. Modify SampleT_maj() to
implement that approach and measure rendering performance. Is there a
benefit compared to the current implementation?
③ It is not possible to directly sample emission in volumes
with the current Medium interface. Thus, integrators are left
to include emission only when their random walk through a medium happens to
find a part of it that is emissive. This approach can be quite
inefficient, especially for localized bright emission. Add methods to the
Medium interface that allow for sampling emission and modify the
direct lighting calculation in the VolPathIntegrator to use them.
For inspiration, it may be worthwhile to read the papers by Villemin and
Hery (2013) and Simon et al. (2017) on
Monte Carlo sampling of 3D emissive volumes. Measure the improvement in
efficiency with your approach. Are there any cases where it hurts
performance?
③ While sampling distances in participating media according to
the majorant is much more effective than sampling uniformly, it does not
account for other factors that vary along the ray, such as the scattering
coefficient and phase function or variation in illumination from light
sources. Implement the approach described by Wrenninge and Villemin
(2020) on product sampling based on adapting the
majorant to account for multiple factors in the integrand and then randomly
selecting among weighted sample points. (You may find weighted reservoir
sampling (Section A.2) a useful technique to apply
in order to avoid the storage costs of maintaining the candidate samples.)
Measure the performance of your implementation as well as how much it
improves image quality for tricky volumetric scenes.
② Add the capability to specify a bump or normal map for
the bottom interface in the LayeredBxDF. (The current implementation
applies bump mapping at the top interface only.) Render images that show
the difference between perturbing the normal at the top interface and
having a smooth bottom interface and vice versa.
② Investigate the effect of improving the sampling patterns
used in the LayeredBxDF—for example, by replacing the uniform random
numbers used with low-discrepancy points. You may need to pass further
information through the BSDF evaluation routines to do so, such as the
current pixel, pixel sample, and current ray depth. Measure how much error
is reduced by your changes as well as their performance impact.
③ Generalize the LayeredBxDF to allow the specification
of an arbitrary number of layers with different media between them. You
may want to review the improved sampling techniques for this case that were
introduced by Gamboa et al. (2020). Verify that your
implementation gives equivalent results to nested application of the
LayeredBxDF and measure the efficiency difference between the two
approaches.