Add albedo to material visualization
This commit is contained in:
parent
9195b48079
commit
829476c602
3 changed files with 43 additions and 15 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue