Skip to main content

lux_aurumque/
lib.rs

1//! `lux-aurumque` — a minimal **transient path tracer** in Rust.
2//!
3//! Standard renderers compute steady-state radiance (light bounced
4//! until equilibrium). This one refuses that simplification: every
5//! photon path carries its cumulative optical length, which determines
6//! its arrival time. Binning by arrival time produces a time-resolved
7//! movie of a Gaussian pulse propagating through a Cornell-box scene
8//! reskinned in *aurum* — gold, copper, amber.
9//!
10//! ## Run the demo render
11//!
12//! Clone the repo and run:
13//!
14//! ```bash
15//! cargo run --release -p lux-aurumque
16//! ffmpeg -framerate 30 -i frames/frame_%04d.png \
17//!        -c:v libx264 -pix_fmt yuv420p -crf 18 lux-aurumque.mp4
18//! ```
19//!
20//! ## Library use
21//!
22//! The crate exposes the path-tracing primitives ([`transient`],
23//! [`camera`], [`material`], [`sphere`], etc.) plus a re-export of
24//! [`SpectralBudget`] — the Faber–Krahn bound that refuses parameter
25//! combinations whose total path-length horizon would exceed `3 · T_1`
26//! for the bounded scene.
27//!
28//! ```
29//! use lux_aurumque::{SpectralBudget, transient::C};
30//!
31//! // 0.95 m room → T_1 ≈ 6.34 ns; admit up to 3·T_1 ≈ 19.0 ns.
32//! let budget = SpectralBudget::for_scene_diameter(0.95, C as f64);
33//! assert!(budget.admits(15e-9));
34//! assert!(!budget.admits(25e-9));
35//! ```
36//!
37//! See `NOTES_PROCESS.md` in the repository for the process-philosophical
38//! framing — Whitehead's ontology mapped onto the renderer's data flow.
39
40#![cfg_attr(docsrs, feature(doc_cfg))]
41#![warn(missing_docs)]
42
43pub mod camera;
44pub mod hit;
45pub mod material;
46pub mod ray;
47pub mod scene;
48pub mod sphere;
49pub mod transient;
50pub mod vec3;
51
52#[doc(inline)]
53pub use spectral_budget::{BudgetError, SpectralBudget};