Fork 0

35 lines
1.1 KiB

# Software 3D Renderer (2018)
## Features
* OBJ model import
* Depth buffering
* Texture mapping with bilinear filtering
* Lighting (ambient, diffuse, specular)
* Smooth shading
## Goals
### 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.