A path tracer written in rust. Inspired by the amazing Ray Tracing in One Weekend book series.
rayo
is (currenty) a command line tool. The available flags and options are:
USAGE:
rayo [OPTIONS] <SCENE>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-a, --aspect <ASPECT-RATIO> Aspect ratio [default: 16/9]
-d, --depth <MAX-DEPTH> Maximum recursion depth [default: 30]
-n, --num-samples <NUM-SAMPLES> Number of samples per pixel [default: 100]
-o, --out <FILE> Rendered image path [default: render.png]
-r, --resolution <RESOLUTION> Horizontal image resolution [default: 480]
ARGS:
<SCENE> The Scene JSON file
To create a render you need to create a corresponding scene file defining the positions, shapes, materials and textures of all of the models in the scene. A collection of example scenes can be found in the scenes
folder.
Many features are yet to be implemented. The basic roadmap is:
- Nice CLI
- Reading scenes from json or some other similar format
- Support for OBJ files for meshes (using assimp)
- Spheres
- Axis aligned boxes
- Triangle meshes
- Planes
- Lambertian diffuse materials
- Metalic materials
- Glass/Dielectrics
- Anti aliasing
- Depth of field
- Skyboxes
- Motion blur
- Adjustable camera positions
- Textures (checkerboard)
- Textures (reading from image)
- Light objects
- parallelize on CPU
- parallelize on GPU (cuda)
- bounding volumes
- make an opengl viewer which allows you to set up scene and then switch to raytraced mode
- have this viewer display the render after each sample
- compile this to webgl and wasm and run in browser?