Skip to content

zixin96/CUDA-Path-Tracer

 
 

Repository files navigation

CUDA Denoiser For CUDA Path Tracer

University of Pennsylvania, CIS 565: GPU Programming and Architecture, Project 4

  • (Charles) Zixin Zhang
  • Tested on: Windows 11, 11th Core i7, 3060 Laptop GPU

pathTracer

Results

Figure 1: Zoomed-in "So many balls" Scene:

Denoised:

Noised:


Figure 2: "So many balls" Scene:

Denoised:

Noised:


Figure 3: A Simple Cornell Box:

This denoiser is achieved by implementing the paper "Edge-Avoiding A-Trous Wavelet Transform for fast Global Illumination Filtering," by Dammertz, Sewtz, Hanika, and Lensch.

Performance Analysis

In my implementation, denoising is performed during the last iteration. We perform 10 iterations on the ray traced images and the 11th iteration is the denoising step.

Denoising Performance

How much time does denoising take in ms?
Figure 1 52
Figure 2 43
Figure 3 44

Since we apply denoising once, this technique is very efficient at eliminating noise in the scene.

Comparison with Pure Ray Traced Images

How many iterations do ray traced images need to achieve a smooth result?
Figure 1 ~1000
Figure 2 ~5000
Figure 3 ~5000

As shown in the table, if we took more samples per pixel to eliminate the noise, it would take more iterations and time to achieve a similar result.

Resolution

Denoising took a significant amount of extra time when the resolution went from 1080p to 4k. It is expected since our run time depends linearly on the pixel count in the scene.

720p 1080p 4K
Figure 1 10ms ~52ms 120ms
Figure 2 ~16ms ~43ms ~215ms
Figure 3 ~17ms ~44ms ~215ms

Changes

In order to programmatically generate a lot of balls (121 balls in figure 1 and 2), scene files are only used to specify the camera specifications. All geometric shapes and materials are specified at run time in the actual code.

Fuzziness is added to the material properties such as we can have fuzzy reflection.

Figure 1 and 2 is genreated by scenes/manyBalls.txt.

References

About

My CUDA Path Tracer

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 84.6%
  • C 13.9%
  • Other 1.5%