This is the code release for the paper Gradient-domain Volumetric Photon Density Estimation in SIGGRAPH 2018.
It extends Mitsuba 0.5.0 to implement a group of rendering techniques to render homogeneous participating media. The code can be compiled on Windows 10 with Visual Studio 2013, and Arch Linux platform. It is preferable to use CMake to compile this project.
- Paper
- Scene data and reference images
- Mitsuba dependencies : Windows and Mac.
We support rendering of participating media in the primal domain with the sppm
integrator, and in the gradient domain with the gvpm
integrator. In each integrator, several photon representations are implemented, including photon points, beams, and planes.
This is basically the surface-based photon mapping technique brought into volumetric rendering. It makes use of a uniform 3D kernel for photon gathering.
In this representation, we treat the camera rays as beams, and gather all photons that the beams intersect. We support gathering with a 2D or a 3D kernel. It is preferable to use the 3D kernel as it allows spatial relaxation during gathering, i.e., the proposed mixed shift in the paper.
This representation treats both camera and light rays as beams. We support gathering with a 1D or a 3D kernel. Similar to BRE, it is preferable to use a 3D kernel for spatial relaxations.
This representation treats the light rays as planes. The current implementation does not check the visibility between the photon plane and the camera ray. For this reason, this technique only works with scenes that skipping visibility check does not bring large errors, e.g., the LASER scene in the paper. We support 0D kernel to gather plane contribution.
Beyond primal domain path tracing and bidirectional path tracing that naturally handles participating media,
we modified gradient-domain path tracing gpt
to support homogeneous participating media.
There is also code extended from gradient-domain bidirectional path tracing gbdpt
(experimental).
Due to time restriction, the current code version has few issues (ordered by priorities). These will be addressed if time permits. Note that these issues do not impact the results produced in our paper. If you want to contribute, please, feel free to address these issues through pull requests.
- Surfaces rendering are not handling correctly in this code version for photon density techniques. Only media to media or surface to media light transports are considered.
- The code only supports area light sources.
- Some restrictions on BSDFs: "mixture bsdf" can handle only two different component. "two-sided bsdf" only handles the case when the same BSDF is used on the two faces surface.
- G-PT: When surface rendering is enabled, direct-lighting computation leads to inaccurate gradients. This problem might be due to BSDF component selection code.
- G-PT: Does not include the optimized routine when an interface shadow the light source.
- G-BDPT: Does not handle scenes with interfaces (due to unmanaged MIS computation).
- (G-)Plane: visibility support.
Support heterogeneous participating media.(G-VPM heterogenous participating media is still missing)
This code is released under the GNU General Public License (version 3).
This source code includes the following open source implementations:
- Screened Poisson reconstruction code from NVIDIA, released under the new BSD license.
- Mitsuba 0.5.0 by Wenzel Jakob, released under the GNU General Public License (version 3).
If you use this code, please consider citing the following works accordingly:
@article{gruson:2018:gdvpm,
title = {{Gradient-domain Volumetric Photon Density Estimation}},
author = {Gruson, Adrien and Hua, Binh-Son and Vibert, Nicolas and Nowrouzezahrai, Derek and Hachisuka, Toshiya},
journal = {{ACM Transactions on Graphics}},
publisher = {{Association for Computing Machinery}},
year = {2018},
}
Please feel free to email adrien.gruson[at]gmail.com
or binhson.hua[at]gmail.com
for questions regarding the code.