CSC 473 Final Project

Shawn Michael Harris, Fall 2020

Concurrency with std::async, uv texture mapping, normal mapping, misc effects

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