Lumo
Lumo is a CPU based multithreaded rendering engine. Made with the goal of learning Rust and physically based rendering :) The renderer is designed to be as modular as possible such that adding new features or algorithms is straightforward.
Features
- Area light sampling
- Path tracing with next event estimation
- Cook-Torrance microfacet BSDF with Beckmann and GGX normal distribution functions
- Multiple importance sampling from VNDF for GGX
- Disney diffuse BRDF with energy normalization used in Frostbite engine
- .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 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
