Add dielectric pbrt material
This commit is contained in:
parent
0480e041cd
commit
2269bd102d
5 changed files with 43 additions and 27 deletions
|
|
@ -1,5 +1,5 @@
|
|||
use rand_distr::{Distribution, Normal};
|
||||
use ray_tracing_core::{material::Material, prelude::*};
|
||||
use ray_tracing_core::{material::Material, math::material::fresnel_real, prelude::*};
|
||||
use std::fmt::Debug;
|
||||
|
||||
#[derive(Debug)]
|
||||
|
|
@ -14,20 +14,6 @@ impl<D: MicrofacetDistribution + Debug> Microfacet<D> {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn fresnel_real(cos_theta_in: Float, nu1: Float, nu2: Float) -> Float {
|
||||
let nu_rel = nu1 / nu2;
|
||||
let cos_theta_tr = Float::sqrt(1.0 - nu_rel * nu_rel * (1.0 - cos_theta_in * cos_theta_in));
|
||||
|
||||
let rs = ((nu1 * cos_theta_in - nu2 * cos_theta_tr)
|
||||
/ (nu1 * cos_theta_in + nu2 * cos_theta_tr))
|
||||
.powi(2);
|
||||
let rp = ((nu1 * cos_theta_tr - nu2 * cos_theta_in)
|
||||
/ (nu1 * cos_theta_tr + nu2 * cos_theta_in))
|
||||
.powi(2);
|
||||
|
||||
0.5 * (rs + rp)
|
||||
}
|
||||
|
||||
impl<R: Rng, D: MicrofacetDistribution + Debug + Sync + Send> Material<R> for Microfacet<D> {
|
||||
fn eval(&self, w_in: Dir3, w_out: Dir3, _rng: &mut R) -> ray_tracing_core::prelude::Color {
|
||||
if w_out.y() > 0.0 && w_in.y() > 0.0 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue