However, that's not especially idiomatic Rust and I would recommend using if condition1 { return None; } instead, unless your conditions are helper functions that you can just make return Option<()> directly to serve this purpose.
I agree if condition1 { return None; } is good enough, but if you use early return to do "continue with the value only when it is valid", then Option::filter would be natural.
However, it sometimes looks like "writing anything in one-liner" style even if it is valid usage...
fn cylinder_toi_pnt(&self, ray: &Ray, toi: f32, max_toi: f32) -> Option<(f32, Point3<f32>)> {
let toi = Some(toi).filter(|&toi| 0.0 < toi && toi < max_toi)?;
let p = ray.point_at(toi).filter(|&p| 0.0 <= p.z && p.z <= self.height)?;
Some((toi, p))
}
This looks a lot like the assert! macro. Maybe write your own assert-like macro where you abstract if condition { return None; }? I think this (more or less) looks like idiomatic Rust:
The error_stack crate has ensure!(cond), which runs return Err { .. } when cond is false.. which doesn't apply directly but I think "ensure" is a nice name for that..
It would be possible for core to implement it, but it still wouldn't help you here, since it would only work in a method returning bool, not one returning Option.