Source Code for SIGGRAPH Asia 2021 Paper Ensemble Denoising for Monte Carlo Renderings.
Paper | Code | Talk Slides
- A C++17 conformant compiler for building the code
CMakefor configuring the project
Eigen3for linear algebra data structures and operations
OpenCVfor image IO and basic operators
cxxopts(included as a git submodule) for parsing CLI options
fbstab(optional, included as a git submodule) for linearly constrained quadratic programming as the baseline solver
Compiling the Project
First, please make sure that Eigen3 and OpenCV are properly install in your system and can be found by CMake.
To clone the repository:
git clone --recursive https://github.com/Mike-Leo-Smith/EnsembleDenoising.git
Then, use CMake to configure the build:
cmake -S <project-dir> -B <build-dir> -D CMAKE_BUILD_TYPE=Release
Note: to help CMake find Eigen3 and OpenCV, you may need to provide
-D Eigen3_DIR=... and
-D OpenCV_DIR=... as well. Also, you can use the
option to specify your favorite generator, and
-D CMAKE_CXX_COMPILER=<...> to choose the C++ compiler.
After the project is properly configured, use the following command to build the program:
cmake --build <build-dir>
And the executable
EnsembleDenosing should appear in
Preparing Input Data
The input data should be organized in the following structure:
│ ├─ color.exr, colorA.exr, colorB.exr, albedo.exr, normal.exr │ ├─ │ │ │ └─ .exr A.exr B.exr │ ├─ │ │ │ └─ .exr A.exr B.exr ...
For example, if
denoising-data is the input directory and two denoisers
nfor are used, the directory structure should be
denoising-data │ ├─ color.exr, colorA.exr, colorB.exr, albedo.exr, normal.exr │ ├─ oidn │ │ │ └─ oidn.exr oidnA.exr oidnB.exr │ └─ nfor │ └─ nfor.exr nforA.exr nforB.exr
You can use any scene, renderer, and denoiser to generate these data. In the paper, we use
Tungsten for rendering.
Running the Program
To print the help message:
To perform the ensemble denoising:
-o -m [, [...]]