Within the past few months I’ve been implementing a path tracer during my weekends and evenings. Having reached what I consider to be an acceptable stopping point, I thought it might be interesting to detail my current implementation alongside the references that inspired me. Let’s jump in!
This series will touch on a variety of features that were implemented in the path tracer. Notably:
- SIMD centric math library
- BVH construction with SAH heuristic
- SSE optimized BVH Traversal
- N-Rooks Sampling
- BRDF multiple importance sampling using the balance heuristic
- GGX-Smith microfacet shading
- Simple obj parsing and loading
- Multi-threading sampling strategy
- Custom memory stack allocators
- Texture mapping
- Bump mapping
- Tonemapping with ACES curves
- Iterative path tracing
These posts will try to explain every aspect of the path tracer as they stand but they might not be as comprehensive as the sources referenced to create it. As a result, I will strive to include all relevant sources for each feature.
You can find the path tracer here: https://github.com/AlexSabourinDev/cranberries/tree/cranberray
Next we’ll talk a about the underpinning of the path tracer, the cranberry_math library, see you then!