Metropolis Light Transport
Here are a collection of papers/links on the topic of Metropolis Light Transport (MLT). The core principle of detailed balance that underpins the Metropolis-Hastings algorithm is extremely neat, and its application to light transport (in particular using Veach's path integral formulation) is very aesthetically pleasing. This post doesn't really go anywhere, just provides links for further reading.
Some papers:
- The thesis Robust Monte Carlo Methods for Light Transport Simulation has full details of the original implementation and a few different mutation strategies.
- The paper Simple and Robust Mutation Strategy for Metropolis Light Transport Algorithm kills all the fun for me. I probably shouldn't comment as I haven't implemented it, but my understanding is that all coordinates are perturbed during mutation, and the coordinates map back to the path space via a bidirectional path construction algorithm. It seems to me that this would not handle well scenes with complicated occlusion between the light and camera (such as a light visible through a small hole). I'd be interested to know the results from anyone that has tested this technique on complex scenes.
- Metropolis Instant Radiosity (MIR) uses path mutations to generate a set of VPLs for instant radiosity. Better coverage of the path space is achieved by using Multiple-Try Metropolis mutations. The extremely interesting part of the algorithm is that the power of each VPL isn't explicitly known, but they all bring constant power to the final image (after the visibility term). It seems to me like there should be a good marriage between this technique and lightcuts, as the visibility term is the weakest part of the lightcuts algorithm.
- Coherent Metropolis Light Transport with Multiple-Try Mutations notes that steps in Multiple-Try Metropolis are parallel, and can be accelerated by using ray packets.
Some projects:
- Indigo is a renderer that uses MLT. It's free for non-commercial use but closed source.
- Lux Render is an authorised fork of PBRT that uses MLT. Source code is available.
- Here's a great article on applying Metropolis-Hastings to rendering the Buddhabrot.
Some advice for anyone trying to implement MLT: test as much as you can in isolation. The main software problem with MLT, and I say this from experience, is that until you have fixed your last bug, your image will just be noise...