This is a real-time 1spp path tracer based on DirectX 12 RayTracing. Detailed daily work process could be found here.
Followings are real-time rendered images. It works stable at 60 FPS (RTX 3060).
Additional details could be found here.
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.
- 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.
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.
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.
- Mesh
- Rectangle
- Cube
- Sphere
- Disk
- Cylinder
- Diffuse
- Conductor
- Rough Conductor
- Dielectric
- Rough Dielectric
- Plastic
- Rough Plastic
- Disney
For details, refer this document.
- Area (rectangle only)
- Environment (only without NEE/MIS)
- Point
- Directional
- Spotlight
- Path Tracer
- Path Tracer with NEE/MIS (direct light sampling)
- Guided Path Tracer
- Temporal accumulation
- Disocclusion fix
- A-Trous wavelet filter
- Basic Resampling
- Temporal Reuse
- Spatial Reuse
- 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.
- Efficient & scalable scene loader
- Exact RELAX & delta motion vector implementation
- ReSTIR with spatial reuse
This project was supported by PearlAbyss.