Skip to content

This is a custom real-time path tracer based on DirectX12.

Notifications You must be signed in to change notification settings

juhyeonkim95/DXRPathTracer

Repository files navigation

DXRPathTracer

This is a real-time 1spp path tracer based on DirectX 12 RayTracing. Detailed daily work process could be found here.

Teaser

Followings are real-time rendered images. It works stable at 60 FPS (RTX 3060).

Teaser Teaser

Additional details could be found here.

Project Overview

The goal of this project is to implement a scalable path tracer that runs in real-time. Implementing path tracer largely refered from Mitsuba renderer and my previous custom path tracer. In order to achieve real-timeness, I try two approahces. First is to exploit denoising techniques. Second is to employ better sampling strategies. Among the various methods, I choose to implement SVGF & ReLAX and ReSTIR respectively.

Project Timeline

  • Week 1~3 : Implement basic path tracer using DirectX12.
  • Week 4,5 : Denoising based on SVGF.
  • Week 6 : Enhance sampling quality using ReSTIR
  • Week 7,8 : Denoising revisited. Implement advanced algorithm ReLAX.

Requirements

This project is implemented based on the framework of DxrTutorials.

It was developed using Visual Studio 2019 16.11.

Windows 10 SDK 19041 or later is required.

You also need to download and import DirectXTex.

Scene Data

For scene data format, Mitsuba renderer's format was used. Refer mitsuba renderer for the details. Example scenes could be downloaded from here. Since scene loading was not the main focus of the project, its implementation is at minimal level. It can load and render only limited scenes. I have tested with Country Kitchen, The Wooden Staircase, The White Room and Salle de bain. Scene with environment map is not fully implemented.

Implementation Progress

(Week 1~3) Core Path Tracer

Shape

  • Mesh
  • Rectangle
  • Cube
  • Sphere
  • Disk
  • Cylinder

BSDF

  • Diffuse
  • Conductor
  • Rough Conductor
  • Dielectric
  • Rough Dielectric
  • Plastic
  • Rough Plastic
  • Disney

For details, refer this document.

Emitter

  • Area (rectangle only)
  • Environment (only without NEE/MIS)
  • Point
  • Directional
  • Spotlight

Integrator (Rendering Equation Estimator)

  • Path Tracer
  • Path Tracer with NEE/MIS (direct light sampling)
  • Guided Path Tracer

(Week 4, 5) Denoising (SVGF)

  • Temporal accumulation
  • Disocclusion fix
  • A-Trous wavelet filter

(Week 6) Enhancing Sampling Quality (ReSTIR)

  • Basic Resampling
  • Temporal Reuse
  • Spatial Reuse

(Week 7, 8) Render Pass & Advanced denoising

  • Falcor-styled render pass structuring (Antialiasing, Tonemap, etc..)
  • Delta reflection motion vector
  • Delta transmission motion vector
  • RELAX diffuse version
  • RELAX specular version

Because of the time limit, RELAX implementation is quite different from the original one. I only managed to develop motion vectors for delta reflection / tramission and split the renderpass, and still used a large portion of SVGF code. If you want to know the exact implementation of RELAX, please refer to the original code.

Not Implemented

  • Efficient & scalable scene loader
  • Exact RELAX & delta motion vector implementation
  • ReSTIR with spatial reuse

Acknowledgement

This project was supported by PearlAbyss.

About

This is a custom real-time path tracer based on DirectX12.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published