Ignis is a path tracer that I started writing roughly a year ago and continue to work on during my spare time. It supports a variety of different surface materials and primitive object types. Currently the renderer only runs on the CPU, but can scale to an arbitrarily large number of render threads. While performance has been a consideration, the primary goal of the project is to improve my understanding of ray tracing and related concepts. As such the codebase is fairly extensible so that I can try out different samplers, integrators and BSDFs with relative ease.
Given how fast and extensible modern graphics hardware has become, real time rasterization is typically no longer done in software. Writing a software renderer can, however, offer insights into the nature of rasterization algorithms and the way they’re implemented in hardware. I decided to try my hand at writing a simple 3D renderer that could process triangle data and vertex attributes completely on the CPU. I also spend some timing becoming familiar with using SIMD instructions to process floating point data in parallel.