This repository contains the implementation of my master's thesis work titled "Hierarchical Reconstruction of Quadtree-Based Approximations of Incident Radiance". It is mainly based on "Variance-Aware Path Guiding" [Rath et al. 2020] and "Practical Path Guiding for Efficient Light-Transport Simulation" [Müller et al. 2017]. My work addresses the fact that, in previous work, the guiding distributions are noisy for short renders (i.e with insufficient training). My approach to improving previous work is to apply Gaussian denoising to the guiding distributions. For anyone who is curious, my thesis can be found in extras/
. In the code, I have tried to mark all of my contributions with "@addition J.N
" to make it easier to navigate. These contributions are mainly found in mitsuba/src/integrators/path/guided_path.cpp
.
In addition to the parameters of the original implementation and other related work I have added some new parameters that can be found below. These can be set in in the scene XML files by using their property name (denoted by the monospace text
in brackets).
This parameter determines whether or not the guiding distributions will be denoised between training iterations.
true
: Enables denoising.false
: Disables denoising.
Default = false
Recommended = true
The standard deviation of the Gaussian filter used for the matrix convolutions when denoising.
Default = 0.8
Recommended = 0.3-1.0
, this depends on the scene.
Whether or not to use workload limiting to keep the overhead of reconstruction down.
true
: Enables workload limiting.false
: Disables workload limiting.
Default = true
Recommended = true
The guiding distribution that should be approximated.
radiance
: Guiding distribution used by Müller et al..simple
: Guiding distribution proposed by Rath et al..full
: Guiding distribution proposed by Rath et al..switch
: An experimental approach that mixes thesimple
andfull
distributions depending on the state of the training process. My evaluation shows that this approach is quite beneficial both for short and long renders.
To compile the Mitsuba code, please follow the instructions from the Mitsuba documentation (sections 4.1.1 through 4.6). Since this new code uses C++11 features, a slightly more recent compiler and dependencies than reported in the mitsuba documentation may be required. I only support compiling mitsuba with the scons build system. I only tested the Mitsuba code on Linux Mint 20.2, using GCC 9.4.0.
The visualization tool, found in the visualizer subfolder, uses the CMake build system. Simply invoke the CMake generator on the visualizer subfolder to generate Visual Studio project files on Windows, and a Makefile on Linux / OS X. I only tested the visualizer code on Linux Mint 20.2, using GCC 9.4.0.
The new code introduced by this project is licensed under the GNU General Public License (Version 3). Please consult the bundled LICENSE file for the full license text.
The bundled KITCHEN scene is governed by the CC-BY 3.0 license.