In Metropolis Light Transport, we need to approximate the integral of the measurement contribution function. I've read that this can be done using a traditional approach like path tracing. However, how exactly do we need to implement this approximation?

I've read the explanation in PBR3, but I still don't understand how this approximation is done exactly.

More precisely, let's make the following definitions (ignoring rigor): Let $M\subseteq\mathbb R^3$ denote the scene surfaces, $\sigma_M$ denote the surface measure on $M$, $$\Omega_n:=\left\{x\in M^{\mathbb N_0}:x_i\ne x_j\text{ for all }0\le i<j\le n\text{ and }x_N=x_n\text{ for all }N\ge n\right\}$$ $$\iota_n:\Omega_n\to M^{\left\{0,\:\ldots\:,\:n\right\}}\;,\;\;\;x\mapsto(x_0,\ldots,x_n)$$ $$\mu_n(A):=\sigma_M^{\otimes\left\{0,\:\ldots\:,\:n\right\}}(\iota_n(A))\;\;\;\text{for }A\subseteq\Omega_n$$ $$\Omega:=\biguplus_{n\in\mathbb N}\Omega_n$$ $$\mu(A):=\sum_{n=1}^\infty\mu_n(A\cap\Omega_n)\;\;\;\text{for }A\subseteq\Omega$$ Moreover, with the usual notation, let $$T(x_0,\ldots,x_n):=\prod_{i=1}^{n-1}f_r(x_{i+1}\to x_i\to x_{i-1})G(x_i\leftrightarrow x_{i+1})$$ $$f(x):=L_e(x_n\to x_{n-1})T(x_0,\ldots,x_n)\;,\;\;\;\text{if }x\in\Omega_n$$ $$h_j(x):=G(x_0\leftrightarrow x_1)W_e^{(j)}(x_0\to x_1)$$ Then, the measurement $I_j$ of the $j$th pixel is $$I_j=\int fh_j\:{\rm d}\mu.$$

Now, the question is: How exactly is $$b:=\int f\:{\rm d}\mu$$ approximated using (unidirectional) path tracing?


This approximation is typically done by running a bidirectional path tracer with a modest amount of samples per pixel. This means multiple paths per pixel to approximate the integral of $f_j$, the measurement contribution function. Veach's original MLT paper explains how it can be done in a way that eliminates start-up bias (see Section 5.1).

  • $\begingroup$ In the notation of Veach's paper, shouldn't we approximate $f$ (with $f_j=h_jf$) instead of $f_j$? $\endgroup$ – 0xbadf00d Sep 10 '18 at 18:16
  • $\begingroup$ Yes absolutely. It's an abuse of notation that is commonly used to bundle the pixel reconstruction filter and the function $f$ together. You are indeed approximating $f$. $\endgroup$ – Hubble Sep 10 '18 at 18:53
  • $\begingroup$ I still don't understand how the approximation is done. I've updated the question. Hopefully it's now clearer what exactly I'm asking for. $\endgroup$ – 0xbadf00d Sep 11 '18 at 18:01

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.