diff --git a/ray-tracing-egui/src/render.rs b/ray-tracing-egui/src/render.rs index cdc006a..c2ec26a 100644 --- a/ray-tracing-egui/src/render.rs +++ b/ray-tracing-egui/src/render.rs @@ -23,6 +23,7 @@ use vulkano::{ type DynRenderer = dyn ClassicalRenderer + Sync>, BasicCamera> + Sync; +#[allow(clippy::type_complexity)] pub const RENDERER: [(&str, fn(u32, u32) -> Box); 5] = [ ("Depth", |w, h| { Box::new(DepthRenderer::new(w, h)) as Box diff --git a/ray-tracing-material/src/iridescent.rs b/ray-tracing-material/src/iridescent.rs index 4410d81..a40363c 100644 --- a/ray-tracing-material/src/iridescent.rs +++ b/ray-tracing-material/src/iridescent.rs @@ -98,70 +98,65 @@ impl Iridescent { if local_c_squred.is_infinite() { 1.0 + } else if local_cos_k_delta.abs() < 1.0 { + let k_delta = f32::acos(local_cos_k_delta); + + let u = f32::sin(k_delta) / f32::sin(self.n * k_delta); + + // if k_delta.is_nan() || u.is_nan() || r.is_nan() { + // dbg!(( + // l, + // theta1, + // theta2, + // local_cos_k_delta, + // local_c_squred, + // s_polaized, + // k_delta, + // u, + // r + // )); + // } + + local_c_squred / (local_c_squred + u * u) + } else if local_cos_k_delta.abs() > 1.0 { + let imk_delta = -f32::ln(f32::abs( + local_cos_k_delta - f32::sqrt(local_cos_k_delta * local_cos_k_delta - 1.0), + )); + + let u = f32::sinh(imk_delta) / f32::sinh(self.n * imk_delta); + + // if imk_delta.is_nan() || u.is_nan() || r.is_nan() { + // dbg!(( + // l, + // theta1, + // theta2, + // local_cos_k_delta, + // local_c_squred, + // s_polaized, + // imk_delta, + // u, + // r + // )); + // } + + local_c_squred / (local_c_squred + u * u) } else { - if local_cos_k_delta.abs() < 1.0 { - let k_delta = f32::acos(local_cos_k_delta); + let u = 1.0 / self.n; - let u = f32::sin(k_delta) / f32::sin(self.n * k_delta); + // if u.is_nan() || r.is_nan() { + // dbg!(( + // l, + // theta1, + // theta2, + // local_cos_k_delta, + // local_c_squred, + // s_polaized, + // u, + // r + // )); + // } - let r = local_c_squred / (local_c_squred + u * u); - // if k_delta.is_nan() || u.is_nan() || r.is_nan() { - // dbg!(( - // l, - // theta1, - // theta2, - // local_cos_k_delta, - // local_c_squred, - // s_polaized, - // k_delta, - // u, - // r - // )); - // } - - r - } else if local_cos_k_delta.abs() > 1.0 { - let imk_delta = -f32::ln(f32::abs( - local_cos_k_delta - f32::sqrt(local_cos_k_delta * local_cos_k_delta - 1.0), - )); - - let u = f32::sinh(imk_delta) / f32::sinh(self.n * imk_delta); - - let r = local_c_squred / (local_c_squred + u * u); - // if imk_delta.is_nan() || u.is_nan() || r.is_nan() { - // dbg!(( - // l, - // theta1, - // theta2, - // local_cos_k_delta, - // local_c_squred, - // s_polaized, - // imk_delta, - // u, - // r - // )); - // } - - r - } else { - let u = 1.0 / self.n; - - let r = local_c_squred / (local_c_squred + u * u); - // if u.is_nan() || r.is_nan() { - // dbg!(( - // l, - // theta1, - // theta2, - // local_cos_k_delta, - // local_c_squred, - // s_polaized, - // u, - // r - // )); - // } - - r - } + local_c_squred / (local_c_squred + u * u) } } diff --git a/ray-tracing-scene/src/acceleration_structure/mod.rs b/ray-tracing-scene/src/acceleration_structure/mod.rs index 4bf44b2..9064988 100644 --- a/ray-tracing-scene/src/acceleration_structure/mod.rs +++ b/ray-tracing-scene/src/acceleration_structure/mod.rs @@ -83,7 +83,7 @@ impl, R: Rng> Scene for AccelerationStructureSc let material = &self.materials[i as usize]; - let light_pdf = if let Some(l) = &material.light { + let light_pdf = if let Some(_l) = &material.light { 0.0 } else { 0.0 diff --git a/ray-tracing-scene/src/examples/basic_cornell.rs b/ray-tracing-scene/src/examples/basic_cornell.rs index 0c9dd9d..5d648ba 100644 --- a/ray-tracing-scene/src/examples/basic_cornell.rs +++ b/ray-tracing-scene/src/examples/basic_cornell.rs @@ -19,6 +19,12 @@ impl BasicCornell { } } +impl Default for BasicCornell { + fn default() -> Self { + Self::new() + } +} + impl ExampleScene for BasicCornell { fn get_scene(&self) -> Box + Sync> { let s = self.scene.get_or_init(|| { diff --git a/ray-tracing-scene/src/examples/cornell2.rs b/ray-tracing-scene/src/examples/cornell2.rs index 5536df1..8145f87 100644 --- a/ray-tracing-scene/src/examples/cornell2.rs +++ b/ray-tracing-scene/src/examples/cornell2.rs @@ -22,6 +22,12 @@ impl Cornell2 { } } +impl Default for Cornell2 { + fn default() -> Self { + Self::new() + } +} + impl ExampleScene for Cornell2 { fn get_scene(&self) -> Box + Sync> { let s = self.scene.get_or_init(|| { diff --git a/ray-tracing-scene/src/examples/mis_test.rs b/ray-tracing-scene/src/examples/mis_test.rs index 3a6695a..bf7d11d 100644 --- a/ray-tracing-scene/src/examples/mis_test.rs +++ b/ray-tracing-scene/src/examples/mis_test.rs @@ -1,15 +1,11 @@ -use std::cell::OnceCell; - -use crate::triangle_bvh::{BVHMaterial, Triangle, TriangleBVH}; - use super::ExampleScene; - +use crate::triangle_bvh::{BVHMaterial, Triangle, TriangleBVH}; use ray_tracing_core::{light::AreaLight, prelude::*, scene::Scene}; use ray_tracing_material::{ - diffuse::DiffuseMaterial, microfacet::{BeckmannDistribution, Microfacet}, mirror::Mirror, }; +use std::cell::OnceCell; pub struct MISTest { scene: OnceCell>, @@ -67,6 +63,12 @@ impl MISTest { } } +impl Default for MISTest { + fn default() -> Self { + Self::new() + } +} + impl ExampleScene for MISTest { fn get_scene(&self) -> Box + Sync> { let s = self.scene.get_or_init(move || { diff --git a/ray-tracing-scene/src/examples/mod.rs b/ray-tracing-scene/src/examples/mod.rs index 2f22952..f7b0dcd 100644 --- a/ray-tracing-scene/src/examples/mod.rs +++ b/ray-tracing-scene/src/examples/mod.rs @@ -49,7 +49,7 @@ pub fn example_scenes() -> HashMap<&'static str, Box { scene: OnceCell>, diff --git a/ray-tracing-scene/src/examples/stanford_dragon.rs b/ray-tracing-scene/src/examples/stanford_dragon.rs index 80179d5..ccc14a8 100644 --- a/ray-tracing-scene/src/examples/stanford_dragon.rs +++ b/ray-tracing-scene/src/examples/stanford_dragon.rs @@ -1,15 +1,11 @@ -use rand::Rng; -use ray_tracing_core::{light::AreaLight, prelude::*, scene::Scene}; -use ray_tracing_material::{ - microfacet::{BeckmannDistribution, Microfacet}, - oren_nayar::OrenNayar, -}; -use std::cell::{Cell, OnceCell}; - use crate::{ parse_obj::ObjData, triangle_bvh::{BVHMaterial, Triangle, TriangleBVH}, }; +use rand::Rng; +use ray_tracing_core::{light::AreaLight, prelude::*, scene::Scene}; +use ray_tracing_material::oren_nayar::OrenNayar; +use std::cell::{Cell, OnceCell}; use super::ExampleScene; diff --git a/ray-tracing-scene/src/examples/stanford_dragon_as.rs b/ray-tracing-scene/src/examples/stanford_dragon_as.rs index 5e5a600..7be3517 100644 --- a/ray-tracing-scene/src/examples/stanford_dragon_as.rs +++ b/ray-tracing-scene/src/examples/stanford_dragon_as.rs @@ -28,6 +28,12 @@ impl StanfordDragon { } } +impl Default for StanfordDragon { + fn default() -> Self { + Self::new() + } +} + impl ExampleScene for StanfordDragon { fn get_scene(&self) -> Box + Sync> { let s = self.scene.get_or_init(|| {