Technologies
- CPU Paralellism with std::async
- UV Texture Coordinate Mapping
- Normal Mapping
- Improvised Metalness Mapping
std::async
std::async was introduced in C++ 11 and is easier to use than both pthreads and open mp. My initial implementation paralellized at the multisampling level and I saw a 30% overall speed improvement. The final implementation was implemented on a per pixel basis and showed a 9.5x to 15x improvement on my 8 core 16 thread intel 9900k cpu.
All cores were working at 100% almost all the time

p4_r2-5.pov, Foggy Day, 1000 samples per pixel, 1000 depth
- with std::async
20.1 sec
- without
3 min, 8.2 sec

p4_r4-1.pov, Foggy Day, 1000 samples per pixel, 1000 depth
- with std::async
12 min, 1 sec
- without
2 hours, 46 min, 12 sec

quiz4.pov, Foggy Day, 1000 samples per pixel, 1000 depth
- with std::async
34.4 sec
- without
6 min, 38.6 sec

UV Texture Coordinate Mapping
Baseline D20.obj, No textures, Foggy Day, 1000 samples per pixel, 1000 depth

D20.obj, with d20 albedo texture, Foggy Day, 1000 samples per pixel, 1000 depth

Normal Mapping, using UV texture coordinates
D20.obj, Visualized Normals, Foggy Day, 1000 samples per pixel, 1000 depth

D20.obj, D20 Normal Map texture + albedo texture, Foggy Day, 1000 samples per pixel, 1000 depth

Metalness Mapping, using UV texture coordinates

Creative Conclusion Image
