Rayxix
An interactive Vulkan path tracer, written from an empty CMake file for my bachelor's thesis: hardware ray tracing, a GGX BSDF, and four denoisers measured against each other.
- Role
- Everything — bachelor's thesis
- Year
- 2026
- Built with
- C++20
- Vulkan
- Slang
- SVGF
- ImGui
- glTF
C++20 on Vulkan's VK_KHR_ray_tracing_pipeline, with an ImGui workspace over the top. The composition root is four lines long — a window, a Vulkan context, a frame coordinator and one tool layer — because everything interesting is underneath it: acceleration structures, descriptor sets, a shader binding table, and the images the path tracer accumulates into.
All of the shading is one Slang file. CMake compiles it into four SPIR-V modules — ray generation, miss, closest hit, and a compute pass for denoising — so the four stages that have to agree about a material are written next to each other rather than in four files that drift. The BSDF is GGX with Smith masking and importance sampling, lights are sampled directly with a shadow ray, and the camera has a real aperture: the lens sample is two numbers added to the ray origin.
Path tracing is an average, and an average of a few samples is noise — so the second half of the project is denoising, and there are four of them rather than one: bilateral, A-trous, temporal reprojection, and SVGF. They are switchable at runtime because the thesis question was never "which is best" but "best at what".
Because it is a thesis, that had to be measured rather than asserted. A deterministic flythrough runs each denoiser across three presets and exports CSV, and the answer turns out to depend entirely on how much ray tracing you are already paying for. At 1 sample per pixel, SVGF costs 46% more GPU time than no denoiser at all; at the quality preset, where tracing dominates the frame, the same SVGF costs about 5% and takes the quality score to 98. In between, temporal reprojection wins outright — 18.16 ms against SVGF's 19.04 for three points less quality, which the mixed score says is the better trade.
© 2026 Tauras Giedraitis · Kaunas, Lithuania · All rights reserved
