Add albedo to material visualization

This commit is contained in:
hal8174 2024-12-31 18:04:52 +01:00
parent 9195b48079
commit 829476c602
3 changed files with 43 additions and 15 deletions

View file

@ -14,24 +14,26 @@ use ray_tracing_material::{
mirror::Mirror,
oren_nayar::OrenNayar,
};
use rayon::iter::{IntoParallelIterator, ParallelExtend, ParallelIterator};
use rayon::iter::{
IntoParallelIterator, IntoParallelRefIterator, ParallelExtend, ParallelIterator,
};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let w_in = Dir3::new(1.0, 1.0, 0.0).normalize();
let color = Color::new(1.0, 1.0, 1.0);
// let m = Mirror::new(color);
// generate_chart("mirror.png", &m, 2, w_in)?;
let m = Mirror::new(color);
generate_chart("mirror.png", &m, 2, w_in)?;
// let m = DiffuseMaterial::new(color);
// generate_chart("diffuse.png", &m, 100, w_in)?;
let m = DiffuseMaterial::new(color);
generate_chart("diffuse.png", &m, 100, w_in)?;
let m = Microfacet::new(BeckmannDistribution::new(0.1), color);
generate_chart("microfacet.png", &m, 100, w_in)?;
// let m = OrenNayar::new(0.5, color);
// generate_chart("oren-nayar.png", &m, 100, w_in)?;
let m = OrenNayar::new(0.5, color);
generate_chart("oren-nayar.png", &m, 100, w_in)?;
Ok(())
}
@ -59,10 +61,28 @@ fn generate_chart<M: Material<SmallRng>>(
Float::MIN_POSITIVE,
);
let area = areas[0].titled("Evaled", ("sans-serif", 30))?;
let eval_energy = eval_histogram.energy();
let area = areas[0].titled(
&format!(
"Evaled ({:.4}, {:.4}, {:.4})",
eval_energy.r(),
eval_energy.g(),
eval_energy.b()
),
("sans-serif", 30),
)?;
plot_material(&area, eval_histogram, max)?;
let area = areas[1].titled("Sampled", ("sans-serif", 30))?;
let sample_energy = sample_histogram.energy();
let area = areas[1].titled(
&format!(
"Evaled ({:.4}, {:.4}, {:.4})",
sample_energy.r(),
sample_energy.g(),
sample_energy.b()
),
("sans-serif", 30),
)?;
plot_material(&area, sample_histogram, max)?;
root.present()?;
@ -240,6 +260,12 @@ impl Histogram {
})
.filter(|(dir, _)| dir.x() * dir.x() + dir.z() * dir.z() < 1.0)
}
fn energy(&self) -> Color {
let total = self.data.par_iter().copied().sum::<Color>();
total / (self.inserted as Float)
}
}
impl ParallelExtend<(Dir3, Color)> for Histogram {