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
CMake
for configuring the projectEigen3
for linear algebra data structures and operationsOpenCV
for image IO and basic operatorscxxopts
(included as a git submodule) for parsing CLI optionsfbstab
(optional, included as a git submodule) for linearly constrained quadratic programming as the baseline solver
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 -G <generator>
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 <build-dir>
if successfully built.
The input data should be organized in the following structure:
<input-dir>
│
├─ color.exr, colorA.exr, colorB.exr, albedo.exr, normal.exr
│
├─ <base-denoiser-1>
│ │
│ └─ <base-denoiser-1>.exr <base-denoiser-1>A.exr <base-denoiser-1>B.exr
│
├─ <base-denoiser-2>
│ │
│ └─ <base-denoiser-2>.exr <base-denoiser-2>A.exr <base-denoiser-2>B.exr
...
For example, if denoising-data
is the input directory and two denoisers
oidn
and
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.
To print the help message:
./EnsembleDenoising -h
To perform the ensemble denoising:
./EnsembleDenoising -i <input-dir> -o <output-dir> -m <base-denoiser-1>[,<base-denoiser-2>[...]]