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
Resource Monitor Screenshot
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