This project started as a playground and implementation of light transport theory and concepts in the form of a unidirectional pathtracer. It is currently a Work In Progress, with a lot of features to work on still.
- Physically based BRDFs (Lambertian, Oren-Nayar, Specular (GGX))
- Naive BRDF sampling
- NEE (Next Event Estimation / Direct light sampling)
- MIS (Multiple Importance Sampling between Naive and NEE)
- OpenGL Compute Shader implementation (OpenGL 4.6 Core, GLSL)
- Custom-made BVH implementations using Sweep SAH split
- (WIP) glTF model loading and material creation
- CMake build that supports Windows (MSVC, Clang for Windows) and Linux (GCC, Clang)
Very early result using a purely Lambertian BRDF and naive hemisphere sampling
First tests of MIS between Naive and NEE
MIS (Naive+NEE), Modified Blinn-Phong, Sweep SAH BVH
Specular BRDF (GGX NDF with Smith geometry func.), using GGX importance sampling - Metallic Gold material
- cgltf (GitHub)
- PCG Random Number Generation Library (Minimal C Edition) (GitHub)
- GLAD - Multi-Language OpenGL Loader-Generator (GitHub)
- Simple DirectMedia Layer 2 - SDL2 (GitHub)
- stb libraries (GitHub)
- glm (GitHub)
- Shader includes (Preprocess shaders and copy/paste included shaders)
- Optimize BVH traversal
- Multiscattering approximation for Oren-Nayar BRDF
- Separate different estimators (BRDF-only, NEE-only, MIS) into different compute shaders
- Implement more variance reduction techniques (stratified sampling, BRDF sampling, low discrepancy sequences).
- Russian Roulette
- Measuring different radiometric quantities (for example intensity, to get an orthographic projection)