Metropolis Light Transport (MLT) is a seminal rendering technique proposed byVeach andGuibas , which applies the Metropolis-Hastings algorithm to the path-space formulation of light transport.
Please refer to the pssmlt page for a general description of MLT-type algorithms and a list of caveats that also apply to this plugin.
Like pssmlt, this integrator explores the space of light paths, searching with preference for those that carry a significant amount of energy from an emitter to the sensor. The main difference is that PSSMLT does this exploration by piggybacking on another rendering technique and “manipulating” the random number stream that drives it, whereas MLT does not use such an indirection: it operates directly on the actual light paths.
This means that the algorithm has access to considerably more information about the problem to be solved, which allows it to perform a directed exploration of certain classes of light paths. The main downside is that the implementation is rather complex, which may make it more susceptible to unforeseen problems. Mitsuba reproduces the full MLT algorithm except for the lens subpath mutation 18. In addition, the plugin also provides the manifold perturbation proposed by Jakob and Marschner .
To explore the space of light paths, MLT iterativelymakes changes to a light path, which can either be large-scalemutations or small-scale perturbations. Roughly speaking, the bidirectionalmutation is used to jump between different classes of light paths, and each one of the perturbations is responsible for efficiently exploring some of these classes. All mutation and perturbation strategies can be mixed and matched as desired, though for the algorithm to work properly, the bidirectional mutation must be active and perturbations should be selected as required based on the types of light paths that are present in the input scene.The following perturbations are available:
(a) Lens perturbation: this perturbation slightly varies the outgoing direction at the camera and propagates the resulting ray until it encounters the first non-specular object. The perturbation then attempts to create a connection to the (unchanged) remainder of the path.
(b) Caustic perturbation: essentially a lens perturbation that proceeds in the opposite direction.
(c) Multi-chain perturbation: used when there are several chains of specular interactions, as seen in the swimming pool example above. After an initial lens perturbation, a cascade of additional perturbations is required until a connection to the remainder of the path can finally be established.
Depending on the path type, the entire path may be changed by this.
(d) Manifold perturbation: this perturbation was designed to subsume and extend the previous three approaches. It creates a perturbation at an arbitrary position along the path, proceeding in either direction. Upon encountering a chain of specular interactions, it numerically solves for a connection path (as opposed to the cascading mechanism employed by the multi-chain perturbation).
18 In experiments, it was not found to produce sigificant convergence improvements and was subsequently removed.
- Max. path depth : integer
- Specifies the longest path depth in the generated output image (where -1 corresponds to ∞). A value of 1 will only render directly visible light sources. 2 will lead to singlebounce (direct-only) illumination, and so on. (Default: -1 -> 24 @ blender)
- Direct Samples : integer
- By default, the implementation renders direct illumination component separately using the direct plugin, which uses low-discrepancy number sequences for superior performance (in other words, it is not handled by MLT). This parameter specifies the number of samples allocated to that method. To force MLT to be responsible for the direct illumination component as well, set this to -1. (Default: 16)
- Luminance samples : integer
- MLT-type algorithms create output images that are only relative.
- The algorithm can e.g. determine that a certain pixel is approximately twice as bright as another one, but the absolute scale is unknown. To recover it, this plugin computes the average luminance arriving at the sensor by generating a number of samples. (Default: 100000 samples)
- Probability factor ? (lambda) : float
- Jump size of the manifold perturbation (Default: 50)
- Two-stage MLT : boolean
- Use two-stageMLT? See pssmlt for details.(Default: false)
- Bidirectional Mutation : boolean
- Lens perturbation : boolean
- Caustic perturbation : boolean
- Multi-chain perturbation : boolean
- Manifold Perturbation : boolean
These parameters can be used to pick the individual mutation and perturbation strategies that will be used to explore path space. By default, the original set by Veach and Guibas is enabled (i.e. everything except the manifold perturbation).
It is possible to extend this integrator with additional custom perturbations strategies if needed.