- P1: Recursive refraction
- P1: Depth of field
- P1: Features from "Ray tracing in a weekend" series
- Ray tracing in a weekend
- Ray tracing: the next week
- Ray tracing: the rest of your life
- P1: Volumetrics
- P1: Textures
- P2: Add denoiser (https://github.com/OpenImageDenoise/oidn)
- P3: Other camera types, like orthographic
- P3: Disney BRDF
- P3: GUI scene viewer (imgui?)
- P2: Double precision support?
- P3: Add model loading test
- Utah teapot
- Stanford bunny
- pbrt scenes? https://benedikt-bitterli.me/resources/
- P0: GPU support?
- P3: Adaptive sampling
- P3: Bidirectional path tracing
- P3: Include an end bound on ray intersections to avoid costly intersection tests that are further away than already-known intersections
- P4: Metropolis light transport
- P1: Some parts of the lighting calculations don't take orientation into account (so lights illuminate things behind them)
- P1: Roughness cannot be set to 0 (or 1?) without black results
- Add surface area heuristic to BVH
- Acceleration structure (BVH)
- Traverse BVH children in an intelligent way, updating max_distance to avoid intersecting farther bounding boxes. Use the sign of the ray's direction vector for the coordinate axis along which the BVH node was split
- Per-vertex normals
- Area light source / stratified sampling
- Antialiasing
- Cornell box
- Stanford dragon
- Tone mapping of the output image (gamma correction?)
- Golden testing framework
- P0: Allow separate rendering of direct and bounce light
- P1: Add multithreading support
- P0: MIS
- P1: Support for a common file format (obj, glTF, USD?)
- P3: Allow configuration of random seed