Lumo
Lumo is a CPU based multithreaded rendering engine. Made with the goal of learning Rust and physically based rendering :)
Features
- Area light sampling
- Path tracing and bidirectional path tracing with MIS
- Cook-Torrance microfacet BSDF with Beckmann and GGX normal distribution functions
- Multiple importance sampling from VNDF for GGX
- .OBJ file parsing
- Surface area hierarchy based kD-trees
Usage
Once the repository is cloned, the examples/ folder contains scenes. To run the hello_sphere.rs example execute the command:
The renderer can be configured either through its setter methods in the examples or partially through the CLI:
Usage: hello_sphere [-s <samples>] [-t <threads>] [-d] [-b]
Optional CLI configuration of renderer. Renderer setter methods have priority.
Options:
-s, --samples number of samples per pixel (defaults to 1)
-t, --threads number of threads used (defaults to all)
-d, --direct use direct light integrator instead of path tracing.
-b, --bdpt use bidirectional path tracing instead of path tracing.
--help display usage information
Using the API
The hello_sphere.rs example is written as follows:
use DVec3;
use *;
use *;
References
- Physically Based Rendering
- Ray Tracing in One Weekend
- Moving Frostbite to Physically Based Rendering
- Eric Veach's PhD Thesis
- ekhzang/rpt
Gallery
