by Fiona Wright
D3D12 Graphics Engine with a focus on Path-Tracing / Spectral-Tracing using RayQuery.
Built for fun and to further my skills in the graphics programming field.
Trying to work on it when I have free time from college.
Uses CMAKE for the build system.
C++, HLSL and Python are the main languages.
- Dear ImGui (GUI)
- spng (PNG Loader)
- tinyddsloader (DDS Loader)
- texconv (PNG/JPG -> DDS Build Step)
- zlib/fastgltf (GLTF Loader)
- WinPixEventRuntime (GPU Events/Markers)
- Repository split between engine (HWI + System + Render) and Apps (SceneStudio)
- Python Execution at runtime for data analysis / debugging
- Hot reloading for shaders
- Set up scene configs and switch between them at runtime seamlessly
- Scene GUI tab where you can modify each objects transform, material, etc
- Microfacet lighting model + Irradiance IBL
- Rotatable cubemap skybox that has parity with path tracer backend
- Many different debug view modes (WorldPos, Normals, Tangents, Roughness, UV, Lambert, Albedo, etc) (Over 20)
- Ability to render lines for debugging directions/axes/etc
- Fully deterministic and seeded
- Russian Roulette, Firefly Threshold, Cosine Importance Sampling
- Furnace Tests for debugging
- Depth of Field
- Independent, Halton, Apple Halton and Owen-Scrambled Halton RNG sampling strategies
- Environment maps with support for Panoramic and Octohedral Equal-Area (Rotatable at runtime)
- Directional lighting + GPU max parallel search on the EA Environment Map to set automatically direction to where luminance is highest
- Denoising (Box, Gaussian, Median, Edge-Avoiding A-Trous) using GBuffer pre-pass
- Proper BSDF / BRDF / BTDF lighting model system
- BRDF Diffuse: Lambertian
- MM: GGX Smith
- MM: GGX Smith Anisotropic
- MM: GGX VCavity VNDF
- MM: GGX Smith VNDF
- MM: GGX Smith Anisotropic VNDF
- All MMs work for both BRDF Specular & BTDF
- Click on a pixel and see its RGBA output value in the GUI
- Automatically collect a pixels value over multiple frames and then plot it in a histogram
- Output different variables inside the path-tracer for each pixel (Normals, Albedo, HitDist, RNG, FirstBounceDirection, etc) (Over 30)
- Take snapshots of the path-tracer output into 2 slots and find the RMSE between them with a compute shader
- Generate golden images, save them as PNGs and load them into slot A
- Automatically take snapshots into slot B every frame and compute the RMSE. Then plot RMSE convergence graphs using python
- Click on a pixel to have all rays shot from that pixel next frame store their positions at each bounce
- That data is then converted into coloured lines so you can follow the rays path
- CIE2006 + Mallet&Yuksel2019 spectral primary decomposition
- Multi-Lobe gaussian curve fitting for CIE_XYZbar & D65 Illuminant curves
- Logistic curve fitting for CIE spectral primaries
- Sellmeier curve fitting for material reflective index spectra
- Many different debug spectra tests
- Zero round-trip error
- Full-Spectrum, Single-Wavelength and Hero-Sampling spectral sampling modes
- Lambert and microfacet BSDF lighting models
- Maxwell fresnell for dielectrics, conductors and glass materials











