pub type Float = f32; pub const MACHINE_EPSILON: Float = std::f32::EPSILON * 0.5; pub const SHADOW_EPSILON: Float = 0.0001; #[inline] pub fn lerp(x: T, a: f64, b: f64) -> f64 { (T::onw() - x) * a + x * b } pub fn linear_pdf(x: f64, a: f64, b: f64) -> f64 { if x < 0.0 || x > 1.0 { return 0.0; } 2.0 * lerp(x, a, b) / (a + b) } pub fn sample_linear(u: f64, a: f64, b: f64) -> f64 { if u == 0.0 && a == 0.0 { return 0.0; } u * (a + b) }