CPU-only Software Rendererer, using hand-rolled SIMD types, and concurrency structures (i.e thread Pool, thread-safe queue, etc. Includes some simple debug features like wireframe drawing, overdraw display, depth buffer display, etc. Only supports obj models, and basic materials/diffuse textures. In orde to efficiently rasterize a larger number of triangles, we partition the screen space into several tiles and sort the triangles into their respective tiles, so the work of rasterizing them (using an efficient scanline technique) can be easily multi-treaded.
Pixels in green were only written to once, pixels in red were written to more than once, either due the pixel being occluded by a triangle closer to the camera in the rendering process, or due to the edges of two connected triangles occupying overlapping pixels.
We provide a build.bat
script for building on Windows, and a build.sh
file for building on MacOS. The output files are saved to ${project_dir}/build
.