Personal tools
You are here: Home Publications Gradient-Domain Path Tracing

Gradient-Domain Path Tracing

ACM Transactions on Graphics (Proceedings of SIGGRAPH 2015)


Markus Kettunen
Marco Manzi
Miika Aittala
Jaakko Lehtinen
Fr├ędo Durand
Matthias Zwicker
 Aalto University
University of Bern
Aalto University
Aalto University, NVIDIA
University of Bern



We introduce gradient-domain rendering for Monte Carlo image synthesis.While previous gradient-domain Metropolis Light Transport sought to distribute more samples in areas of high gradients, we show, in contrast, that estimating image gradients is also possible using standard (non-Metropolis) Monte Carlo algorithms, and furthermore, that even without changing the sample distribution, this often leads to significant error reduction. This broadens the applicability of gradient rendering considerably. To gain insight into the conditions under which gradient-domain sampling is beneficial, we present a frequency analysis that compares Monte Carlo sampling of gradients followed by Poisson reconstruction to traditional Monte Carlo sampling. Finally, we describe Gradient-Domain Path Tracing (G-PT), a relatively simple modification of the standard path tracing algorithm that can yield far superior results.


publication, results and comparisons, supplemental material, slides


Our implementation is built on top of Mitsuba renderer. The code implements gradient-domain path tracing (G-PT) and gradient-domain bidirectional path tracing (G-BDPT). We provide pre-compiled binaries for Visual Studio 2013 with CUDA or CPU reconstruction, the source code on a repository on github, the scene-descriptions of all scenes that were used in both papers, and the source code of the CUDA reconstruction. 


source code repositoryscenes, solver (stand-alone)

pre-built binaries for VC++2013: win64(CPU)win64(CUDA)


The way we describe the relative MSE in Section 6 slightly differs from how we computed it for the results and comparisons: We average the errors of each color channel instead of summing them up and use an epsilon value of 0.01 instead of 0.001. We provide a Matlab script to reproduce our error measurements: relative MSE script

Document Actions