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 projectEigen3for linear algebra data structures and operationsOpenCVfor 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.gitThen, use CMake to configure the build:
cmake -S <project-dir> -B <build-dir> -D CMAKE_BUILD_TYPE=ReleaseNote: 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 -hTo perform the ensemble denoising:
./EnsembleDenoising -i <input-dir> -o <output-dir> -m <base-denoiser-1>[,<base-denoiser-2>[...]]