Nice work.
I'm always a fan of custom raytracers since I feel that they're projects that everyone in CS should do once. It's possible to get a raytracer built in a day [1][2], but you can also endlessly expand the project to create something as photorealistic as your project.
One request: can you add benchmark numbers to each image? I.e, "this image was rendered in X minutes on Y hardware". This is particularly important since your renderer implemented a bunch of performance optimizations so it's helpful to compare it with other physically-based renderers.
[1] https://www.kevinbeason.com/smallpt/
[2] https://raytracing.github.io/books/RayTracingInOneWeekend.ht...