Skip to content


Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


dpt is a prototypical renderer that implements the algorithm presented in the paper "[Anisotropic Gaussian Mutations for Metropolis Light Transport through Hessian-Hamiltonian Dynamics] (" by Tzu-Mao Li, Jaakko Lehtinen, Ravi Ramamoorthi, Wenzel Jakob, and Frédo Durand. The algorithm utilizes the derivatives of the contribution function of a (bidirectional) path tracer to guide local sampling, hence the name dpt.

dpt supports a limited form of mitsuba's scene format. It supports pinhole camera, three kinds of BSDF (diffuse, phong, roughdielectric), three kinds of emitters (point, area, envmap), trianglemesh shape, and linear motion blur. See scenes/torus for an example scene.

If you want to understand the algorithm by looking at the source code, a good starting point is to look at mlt.cpp, h2mc.cpp, and path.cpp first.

dpt uses tup as its build system. It depends on several libraries: Eigen, OpenImageIO, embree, and zlib. It uses ispc to compile the derivative code it generates. It also uses pugixml to parse the scene file and PCG for fast and high-quality random number generation. A large portion of dpt is inspired by mitsuba, pbrt-v3, and SmallVCM

dpt needs to generate a dynamic library that contains functions for computing the derivatives of the path contribution function. Before you execute dpt, you will need to specify the directory used for reading/writing the dynamic library by setting the environment variable DPT_LIBPATH (e.g. export DPT_LIBPATH=/path/to/dpt/src/bin). dpt will search that directory for the dynamic library, and if it does not find it, it will create one.

The program is only tested on OSX 10.10.5 with clang and Ubuntu 14.04 with gcc. Currently it does not support windows system.

Please contact Tzu-Mao Li (tzumao at if there are any issues/comments/questions.


No releases published


No packages published