initial MLT documentation
parent
65c195bffb
commit
6c969dce4a
11
doc/main.bib
11
doc/main.bib
|
@ -247,6 +247,17 @@
|
||||||
year={1994}
|
year={1994}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@inproceedings{Veach1997Metropolis,
|
||||||
|
author = {Veach, Eric and Guibas, Leonidas J.},
|
||||||
|
title = {Metropolis light transport},
|
||||||
|
booktitle = {Proceedings of the 24th annual conference on Computer graphics and interactive techniques},
|
||||||
|
series = {SIGGRAPH '97},
|
||||||
|
year = {1997},
|
||||||
|
pages = {65--76},
|
||||||
|
publisher = {ACM Press/Addison-Wesley Publishing Co.},
|
||||||
|
address = {New York, NY, USA}
|
||||||
|
}
|
||||||
|
|
||||||
@article{Grunschloss2010Enumerating,
|
@article{Grunschloss2010Enumerating,
|
||||||
title={Enumerating Quasi-Monte Carlo Point Sequences in Elementary Intervals},
|
title={Enumerating Quasi-Monte Carlo Point Sequences in Elementary Intervals},
|
||||||
author={Gr{\"u}nschlo{\ss}, L. and Raab, M. and Keller, A.},
|
author={Gr{\"u}nschlo{\ss}, L. and Raab, M. and Keller, A.},
|
||||||
|
|
|
@ -22,14 +22,50 @@
|
||||||
|
|
||||||
MTS_NAMESPACE_BEGIN
|
MTS_NAMESPACE_BEGIN
|
||||||
|
|
||||||
/**
|
/*!\plugin{mlt}{Path Space Metropolis Light Transport}
|
||||||
* \order{10}
|
* \order{10}
|
||||||
* Veach-style Metropolis Light Transport implementation with support for
|
* \parameters{
|
||||||
* bidirectional mutations, lens perturbations, caustic perturbations and
|
* \parameter{directSamples}{\Integer}{
|
||||||
* multi-chain perturbations. Several optimizations are also implemented,
|
* By default, this plugin renders the direct illumination component
|
||||||
* namely separate direct illumination, two-stage MLT,
|
* separately using an optimized direct illumination sampling strategy
|
||||||
* and importance sampling of mutation strategies. For details, see the
|
* that uses low-discrepancy number sequences for superior performance
|
||||||
* respective parameter descriptions.
|
* (in other words, it is \emph{not} rendered by MLT). This
|
||||||
|
* parameter specifies the number of samples allocated to that method. To
|
||||||
|
* force PSSMLT to be responsible for the direct illumination
|
||||||
|
* component as well, set this parameter to \code{-1}. \default{16}
|
||||||
|
* }
|
||||||
|
* \parameter{maxDepth}{\Integer}{Specifies the longest path depth
|
||||||
|
* in the generated output image (where \code{-1} corresponds to $\infty$).
|
||||||
|
* A value of \code{1} will only render directly visible light sources.
|
||||||
|
* \code{2} will lead to single-bounce (direct-only) illumination,
|
||||||
|
* and so on. \default{\code{-1}}
|
||||||
|
* }
|
||||||
|
* \parameter{rrDepth}{\Integer}{Specifies the minimum path depth, after
|
||||||
|
* which the implementation will start to use the ``russian roulette''
|
||||||
|
* path termination criterion. \default{\code{5}}
|
||||||
|
* }
|
||||||
|
* \parameter{luminanceSamples}{\Integer}{
|
||||||
|
* MLT-type algorithms create output images that are only
|
||||||
|
* \emph{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{\code{100000} samples}
|
||||||
|
* }
|
||||||
|
* \parameter{twoStage}{\Boolean}{Use two-stage MLT?
|
||||||
|
* See below for details. \default{{\footnotesize\code{false}}}}
|
||||||
|
* \parameter{\footnotesize bidirectional\showbreak Mutation,
|
||||||
|
* [lens,caustic,multiChain,manifold]Perturbation,
|
||||||
|
* causticPerturbation, multiChain\showbreak Perturbation, manifoldPerturbation}{\Boolean}{
|
||||||
|
* These parameters can be used to choose the mutation strategies that
|
||||||
|
* should be used. By default, only the bidirectional mutation is
|
||||||
|
* enabled.
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* Metropolis Light Transport is a seminal rendering technique proposed by Veach and
|
||||||
|
* Guibas \cite{Veach1997Metropolis}, which applies the Metropolis-Hastings
|
||||||
|
* algorithm to the problem of light transport in the path-space setting.
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
class MLT : public Integrator {
|
class MLT : public Integrator {
|
||||||
public:
|
public:
|
||||||
|
@ -101,6 +137,8 @@ public:
|
||||||
/* Selectively enable/disable the manifold perturbation */
|
/* Selectively enable/disable the manifold perturbation */
|
||||||
m_config.manifoldPerturbation = props.getBoolean("manifoldPerturbation", false);
|
m_config.manifoldPerturbation = props.getBoolean("manifoldPerturbation", false);
|
||||||
m_config.probFactor = props.getFloat("probFactor", 50);
|
m_config.probFactor = props.getFloat("probFactor", 50);
|
||||||
|
|
||||||
|
/* Stop MLT after X seconds -- useful for equal-time comparisons */
|
||||||
m_config.timeout = props.getInteger("timeout", 0);
|
m_config.timeout = props.getInteger("timeout", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -225,7 +225,7 @@ public:
|
||||||
m_config.directSampling = props.getBoolean(
|
m_config.directSampling = props.getBoolean(
|
||||||
"directSampling", true);
|
"directSampling", true);
|
||||||
|
|
||||||
/* Recommended mutation sizes in the primary sample space */
|
/* Recommended mutation sizes in primary sample space */
|
||||||
m_config.mutationSizeLow = props.getFloat("mutationSizeLow", 1.0f/1024.0f);
|
m_config.mutationSizeLow = props.getFloat("mutationSizeLow", 1.0f/1024.0f);
|
||||||
m_config.mutationSizeHigh = props.getFloat("mutationSizeHigh", 1.0f/64.0f);
|
m_config.mutationSizeHigh = props.getFloat("mutationSizeHigh", 1.0f/64.0f);
|
||||||
Assert(m_config.mutationSizeLow > 0 && m_config.mutationSizeHigh > 0 &&
|
Assert(m_config.mutationSizeLow > 0 && m_config.mutationSizeHigh > 0 &&
|
||||||
|
@ -241,6 +241,8 @@ public:
|
||||||
possible, while ensuring that there are enough units to keep all
|
possible, while ensuring that there are enough units to keep all
|
||||||
workers busy. */
|
workers busy. */
|
||||||
m_config.workUnits = props.getInteger("workUnits", -1);
|
m_config.workUnits = props.getInteger("workUnits", -1);
|
||||||
|
|
||||||
|
/* Stop MLT after X seconds -- useful for equal-time comparisons */
|
||||||
m_config.timeout = props.getInteger("timeout", 0);
|
m_config.timeout = props.getInteger("timeout", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue