This work is in progress.
CUDA / C++ path tracer with bounding volume hierarchy (BVH) based on the tutorial series by jbikker
Scene 0: 3 instances | BVH heat map (max 267) |
---|---|
![]() |
![]() |
Scene 1: 10,000 instances | BVH heat map (max 600) |
---|---|
![]() |
![]() |
Scene 2: Model with vertex attributes | BVH heat map (max 123) |
---|---|
![]() |
![]() |
triangles per mesh | BLAS | time (s) | TLAS | total triangles | max tests | |
---|---|---|---|---|---|---|
Scene 0 | 505,848 | 792,591 | 0.88 | 5 | 1,517,544 | 267 |
Scene 1 | 505,848 | 792,591 | 0.88 | 19,819 | 5,058,480,000 | 600 |
Scene 2 | 3,828 | 4,899 | 0.0049 | 1 | 3,828 | 123 |
- Resolution: 1500 x 800
- Samples: 100
- Max bounces: 6
- CPU: 13th Gen Intel Core i7-13700H × 20
- GPU: NVIDIA GeForce RTX 3050 6GB
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
"Bust of Menelaus" by Scan The World
"Viking room" by nigelgoh (edited)
Environment map from HDR Haven
- BVH (BLAS + TLAS) construction and traversal
- Cook-Torrance
- Trowbridge-Reitz (GGX) specular
- Lambertian diffuse
- BRDF importance sampling
Running outputs parameters and progress to the console
Resulting image is output as output.bmp
make clean
(to remove old executable)make build
make run
(with default settings)make all
(clean, build, run)./PathTracer <options>
-d
0: CUDA (default), 1: CPU-w
width of rendered image (e.g.-w 512
)-h
height of rendered image-s
samples per pixel-b
maximum bounces per ray per sample-t
number of threads (ignored when using CUDA)-p
preset scene [0, 2]-a
output BVH heatmap (ignores-s
and-b
)
- GLM for maths functions and data structures
- stb for reading and writing images (included in /lib)
- stl_reader for reading STL files (included in /lib)
- tinyobjloader for loading OBJ files (included in /lib)
- C++17
- make (optional)