Progressive path tracing in Vulkan compute.
The Vulkan parts implement a trivial graphics pipeline that just displays a float image. A compute shader paints the image by path tracing a virtual scene.
The path tracing implementation loosely follows Peter Shirley's Raytracing in One Weekend series (at the moment less loosely) and Alan Wolfe's tutorial series. So far, it has
- Probabilistic path tracing with diffusion, reflection, and transmission:
- R2 low discrepancy sequence for sub-pixel variation of the primary rays (i.e., anti-aliasing)
- Randomly chosen diffuse, specular, transmissive rays
- Russian roulette and absorption-threshold-based ray termination
- Primitives: spheres, parametric checkered quads (because that seems mandatory for raytracer test images)
- Rendering into sRGB target for proper gamma correction
- Reinhard tone mapping and ACES filmic tone mapping
- Simple upright orbit camera
Libraries used: glm, GLFW, Dear ImGui, Vulkan Memory Allocator