Nodes and meshes in BVH: 62.078s
Only meshes in BVH: 81.887s
1280x960 resolution (click for full size) with 16 low-discrepancy samples per pixel
The model madness scene makes use of the Stanford Dragon (1,132,830 tris), Happy Buddha (1,087,716 tris), Armadillo (345,944 tris) and Bunny (69,451 tris) from the Stanford 3D Scanning Repository, the smoothed version of the EuroGraphics 2007 Phlegmatic Dragon (960,152 tris), the ordered polymesh version of Killeroo (46,000 tris), Blender's Suzanne (1000 tris) and the high res Utah teapot (6,320 tris).
Nodes and meshes in BVH: 191ms
Only meshes in BVH: 228ms
With only bounding box tests (ie. no BVH): 13.066s
Rendered with 1 sample per pixel
My old obj loading code is really awful and was unbearably slow when I started working with large models like those in the model madness scene. Instead of spending time optimizing the text parser (since even really good text parsing isn't crazy fast) I put together a brain-dead simple binary format that I can read directly into my mesh object without any parsing or other overhead (eg. lots of small memory allocations). These binary objs are generated once by a mesh pre-processor included in the ray tracer and searched for automatically when looking for an obj file, saving tons of time. The plot shows the loading times of my terrible obj loader compared to the binary format. The binary obj times are really low so you'll probably need to mouse over the bars to see the times. Note that times of 0ms were below measurement precision.
I tried out the three different BVH split methods discussed in class on the model madness scene and measured both time to build and overall render time of each method when used for creating the mesh BVHs. In all 3 tests the nodes were in a BVH built using SAH so the comparison is only on the different methods effects on the mesh BVH build time and quality.
Render times were measured using
std::chrono::high_resolution_clock and only include time to render,
ie. time to load the scene and write the images to disk is ignored. Both images were rendered using 8 threads with
work divided into 8x8 blocks and worked on in Z-order. The BVHs used in both scenes were built using SAH to choose
Charts made using C3.js