Multiple Scattering
Experimenting with volume rendering and multiple scattering has been on my todo list for a long time, so recently I started trying to understand how scattering events fit into a bidirectional path tracer. I found surprisingly few references that deal with volume scattering in the Veach framework (or more accurately, extend the Veach framework to deal with this). Most useful to me so far were:
- Metropolis Light Transport for Participating Media by Mark Pauly, Thomas Kollig, Alexander Keller (EG 2000).
- Manifold Exploration: A Markov Chain Monte Carlo technique for rendering scenes with difficult specular transport by Wenzel Jakob, Steve Marschner (to appear in SIGGRAPH 2012).
It was quite quick to add support for vertices that represent scattering events, but it certainly wasn’t trivial to calculate pdf ratios for multiple importance sampling. I’m going to do a proper writeup of all the equations in the next post. For now, here are two quick test renders:


Image statistics: bidirectional path tracing with multiple importance sampling, multiple scattering in (unbounded) isotropic medium with isotropic phase function, max path length 16, approximately 500spp.
Once I get volume caustics working I will have a small party. And then get back to finishing the VPL post from April…
What is so different with the MIS weights? You only need to add the distance sampling, which results in slightly different pdf if the point ends up being in the medium or on a surface, but that’s essentially it. The directional sampling is either BSDF or a phase function, which can be encapsulated in the implementation. It becomes much more nasty with inhomogeneous media, where it’s impossible to exactly compute distance pdfs, cause they are integrals themselves (assuming transmittance based distance sampling). Actually, adding participating media on top of a working bidirectional path tracer is surprisingly straightforward.
Iliyan
21 Jun 12 at 8:44 pm
Well maybe it’s just my maths that are a bit rusty then, I didn’t find the new path space measure to be trivial, but that’s essentially it.
Simon Brown
21 Jun 12 at 8:57 pm
I agree it can be a bit confusing in the beginning. But it’s essentially a slight extension of Veach framework, where a path vertex can not only lie on a surface, but can also be in a medium. Thus the path vertex measure is either area or volume, and is specified using the characteristic bit vector. Additionally, in the geometric you generalize the binary visibility term to the transmittance between the two points (which is 0 if the connecting line intersects an opaque object). You make the BSDF to also handle volumetric scattering (via the phase function) and that’s it. That’s all to Pauly’s path integral extension.
Iliyan
22 Jun 12 at 10:29 am