CS 488 Ray Tracer Project
Objective 1: New Primitives
I added two new primitives: cylinders and cones.
Objective 2: Constructive Solid Geometry (CSG)
First row: difference
Second row: union and two differences on the same primitive
Third row: intersection
Objective 3: Texture Mapping
Objective 4: Refraction
Objective 5: Soft Shadows
Objective 6: Reflection
Objective 7: Perlin Noise
Objective 8: Depth of Field
Objective 9: Uniform Spatial Subdivision
Results for 8 threads and 4096 voxels (on the macho cows scene):
With no optimizations | No subdivision, with bounding boxes | With subdivision, with bounding boxes | |
Real | > 2m45.648s | 0m46.611s | 0m33.821s |
User | > 20m27.353s | 3m5.321s | 2m8.716s |
Sys | > 0m2.371s | 0m0.365s | 0m0.170s |
We can see that subdivision provides roughly a 40% increase in speed.
Objective 10: Final Scene
Bonus Feature: Multithreaded Rendering
n is the number of threads (Tests performed on a quad-core early 2013 Macbook Pro)
n=1 | n=4 | n=8 | n=16 | n=32 | |
Real | 1m55.321s | 1m5.880s | 0m40.337s | 0m32.612s | 0m30.009s |
User | 1m55.245s | 2m4.765s | 2m34.474s | 3m17.845s | 3m43.431s |
Sys | 0m0.071s | 0m0.089s | 0m0.180s | 0m1.181s | 0m1.191s |
We can see that the effective real time decreases as we increase threads, with no significant gain around 16 threads.