Crate rustic_zen

source ·
Expand description

Photon Garden Raytracer Impementation.

Rustic Zen renders artworks from a scene definition by simulating individual photons and tracing their path as they bounce through a 2D. space.

Photons are generated by Lights and interact with Objects. Each interaction results in either the photon being absorbed, or being allowed to continue with a new direction, based on the rules defined by the Object’s Material.

§Example usage:

extern crate rustic_zen;
use rustic_zen::prelude::*;
use rustic_zen::material::hqz_legacy;
use std::sync::Arc;

fn main() {
    // Set up constants.
    let width: f64 = 1920.0;
    let height: f64 = 1080.0;

    // Build a basic Material
    let m = hqz_legacy(0.3, 0.3, 0.3);

    // Build a basic Object
    let o = Segment::line_from_points((0.0,(height * 0.75)), (width, (height * 0.75)), m);

    // Build a basic Light
    let l = Light::new((width / 2.0, height / 2.0), 1.0, 0.0, 0.0, (360.0, 0.0), Sampler::new_blackbody(5800.0));

    // Construct a renderer object and add the light and object to it.
    let s = Scene::new(width as usize, height as usize).with_object(o).with_light(l);

    // Create an image to render into.
    let mut i = Arc::new(Image::new(width as usize, height as usize));

    // Render Image
    println!("Tracing Rays");
    let rays = s.render(RenderConstraint::TimeMS(1000), 1, &mut i);
    // this call should probably be more like 5000 - 15000 ms and use your number of threads,
    // but this example is run by various CI tools, and tests can't take too long.

    // Output the Image as a Vec<u8>
    println!("Serializing!");
    let data = i.to_rgba8(rays, 0.7, 1.2);
     
    // Do Export to a PNG or whatever you want here.
}

Modules§

  • Rustic Zen’s native geometry primitives.
  • Module providing render targets for both Software and Hardware accelerated image rendering.
  • Materials in Rustic Zen are defined as closures that act on a single ray when intersecting wtth an object.
  • This prelude contains everything to quickstart using Rustic Zen.
  • Wrappers for stochastically sampled variables.
  • Scene Definition and Rendering Control.