This document describes daily work progess of the project.
Understand basics of DXR (reference : https://intro-to-dxr.cwyman.org/)
- Raytracing pipeline (anyhit-closesthit-miss)
- DXR Initialization & setup
- Acceleration structure (BLAS, TLAS)
- Root signature & association
- Ray tracing pipeline state object (RTPSO)
- Shader table
- Implement very simple ConstantBuffer that includes mesh color
- Need to change StructuredBuffer?
- Still studying StructuredBuffer
- In order to access normal, uv information, implementing StructuredBuffer is inevitable!
- Changed mesh color buffer from ConstantBuffer to StructuredBuffer.
- How to implement normal/uv information buffer? (StructuredBuffer vs ByteAddressBuffer)
- Load UV/Normal infomation using StructuredBuffer
- Try to apply texture. Creating buffer is done, but uploading texture data is troublesome.
- Exploit external library (DirectXTex)
- Load a single texture using DirectXTex.
- Implement per-instance texture loading using per-instance SRV.
- Working on loading XML file better way.
- Implement new geometry (rectangle, cube) by transforming it into a mesh. (no additional intersection program)
- Implement a simple rectangular emitter.
- Diffuse only real-time path tracer.
- Implement MIS(Multiple Importance Sampling) with single light
- Code refactoring
- Reduce recursion depth by moving shadowray program from closest hit to raygen program.
Performance Comparison for kitchen scene (256 spp, ms)
Frame | depth 2 | depth 1 |
---|---|---|
1 | 1389 | 953 |
2 | 1375 | 959 |
3 | 1354 | 978 |
4 | 1350 | 940 |
5 | 1351 | 944 |
6 | 1366 | 941 |
Average | 1364 | 953 |
About x1.5 speed up!
- Working on organizing BSDF sampling / pdf / eval and light sampling code.
- Try to apply filtering & denoising.
- Reading SVGF, A-SVGF paper.
- Try to implement SVGF
- MIS with multiple light (uniformly select one light)
- Read ReSTIR paper.
- Code refactoring.
- Still reading SVGF.
- Implement postprocessing.
- Implement postprocessing with multiple shaders.
- Implementing SVGF using post processing (previously implemented on ray-tracing program).
- SVGF v1.0 implemented.
- Visible artifacts exist --> need to correct it.
- Trying to resolve artifacts
- Material specific problem --> do not demodulate non-diffuse materials.
- Temporal unstability --> improved by adopting historyLength instead of fixed value (0.2)
-
Post processing code refactoring
-
SVGF artifact resolving.
-
If pixel has been just disoccluded, it's tend to be so noisy as the figure below.
- Code refactoring.
- GUI using ImGui.
- Reading ReSTIR paper.
- Try to implement basic ReSTIR.
- Implemented ReSTIR only using temporal reuse.
- Integrated ReSTIR into path tracing pipeline.
- Restructuring program to implement ReSTIR with spatial reuse.
- Still restructuring project.
- Making several render pass that inspired from Falcor's.
- Created following render passes.
- Path Tracer Pass
- SVGF Pass
- Blend Pass
- Tonamap Pass
- FXAA Pass
- Overall descriptor / resource heap structure
- Reading RELAX, the follow up work for SVGF.
- Code refacoring (path tracer shader parts).
- Still struggling with SVGF artifacts. (a-trous filtering seems has a problem)
- Succeed to resolve A-trous filtering problem.
- Should make a different constant buffers so that uploading value to one buffer does not interrupt the others (reference).
- Complete unfinished part in materials (plastic, roughplastic).
- Implementing RELAX + NVIDIA NRD pass.
- Divided radiance into diffuse, specular, delta reflection, delta transmission components (What's next?).
- Still implementing RELAX
- Implement delta reflection / refraction motion vector calculation
- RELAX diffuse / specular version implement
- Prepare final presentation
- Write a document
- Code refactoring
- Try to minimize copying buffer --> change to swap.
- Refactor writing to UAV part.
- FPS 52 (before) -> 63 (now)
- Remove writing to UAV as most. (FPS : 63->72)
- Merged all denoising pass into one large pass (RELAXSingle). (FPS: 72 -> 80)