Fork 0
Go to file
Austin Morlan d46be66e55
2022-10-28 13:57:25 -07:00
Source Code cleanup 2020-07-01 17:43:10 -07:00
CMakeLists.txt Code cleanup 2020-07-01 17:43:10 -07:00
LICENSE Initial commit 2020-07-01 17:42:42 -07:00
README.md Update README 2022-10-28 13:57:25 -07:00


Software 3D Renderer (2018)


  • OBJ model import
  • Depth buffering
  • Texture mapping with bilinear filtering
  • Lighting (ambient, diffuse, specular)
  • Smooth shading


Implement basic GPU pipeline in software

To best learn what a GPU is doing, I wanted to recreate the functionality of the GPU in software. It's not anywhere near as fast as a GPU of course, but it's not slow either (for a single model that is relatively low-poly).

Good cache performance

The biggest bottleneck of modern CPU performance is latency between memory and the CPU, so I tried to use spatial and temporal locality to keep data in the cache. Although I chose to go for array-of-structs instead of struct-of-arrays, the cache miss rate is fairly low.

Minimal libraries

I created my own very basic OBJ loader (rather than use tinyobj) to better understand how OBJ files are constructed, along with their respective MTL files. I also wrote my own linear algebra functions and classes (rather than use glm) to better understand the low-level math operations.