From 3049fb1389d932d80b34d53c1890b6a9daf416e3 Mon Sep 17 00:00:00 2001 From: numzero Date: Wed, 26 Nov 2025 15:15:36 +0300 Subject: [PATCH 1/3] metallic reflections! not exactly accurate, but look OK --- src/lib.rs | 5 ++--- src/trace.rs | 4 ++++ src/trace/reflective.rs | 46 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 src/trace/reflective.rs diff --git a/src/lib.rs b/src/lib.rs index 8fc132d..06b9d40 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -14,7 +14,7 @@ use crate::{ DEPTH_FORMAT, OUTPUT_FORMAT, lines::{LookParams, Mesh, Pipeline, Vertex}, }, - trace::{Hit, Lambertian, Reflector, Scene, Source, Sphere}, + trace::{DiscReflector, Hit, Lambertian, Reflector, Scene, Source, Sphere}, }; pub use crate::ffi::{RedrawArgs, SphericalPosition, UseNormal}; @@ -370,12 +370,12 @@ impl Core { } } } + let reflector = DiscReflector { roughness: 0.25 }; if args.reflections > 0 { let mut hits1 = hits.clone(); for _ in 0..args.reflections { let mut hits2: Vec = Vec::with_capacity(hits1.len()); for hit in &hits1 { - let reflector = Lambertian; let reflected = reflector.reflect(&mut prng, hit.normal, hit.incident.dir); let light = hit.light * hit.object.color; let ray = Ray::new(hit.incident.base, reflected); @@ -422,7 +422,6 @@ impl Core { }; assert!(normal.is_normalized()); assert!(hit.incident.dir.is_normalized()); - let reflector = Lambertian; let in_lm = light_hit.light; let out_cd = in_lm * reflector.brdf(normal, light_hit.incident.dir, -hit.incident.dir) diff --git a/src/trace.rs b/src/trace.rs index 6f55949..bf87448 100644 --- a/src/trace.rs +++ b/src/trace.rs @@ -5,6 +5,10 @@ use rand_distr::{Distribution, UnitSphere}; use crate::{camera::OrbitalCamera, ray::Ray}; +pub use reflective::DiscReflector; + +mod reflective; + #[derive(Debug, Clone)] pub struct Source { /// Horizontal position (angle), in radians from +X towards +Y. diff --git a/src/trace/reflective.rs b/src/trace/reflective.rs new file mode 100644 index 0000000..b3a365f --- /dev/null +++ b/src/trace/reflective.rs @@ -0,0 +1,46 @@ +use std::f32::consts::PI; + +use glam::Vec3; +use rand_distr::{Distribution, Uniform, UnitSphere}; + +use super::Reflector; + +#[derive(Debug, Clone)] +pub struct DiscReflector { + pub roughness: f32, +} + +impl Reflector for DiscReflector { + fn brdf(&self, normal: Vec3, incident: Vec3, reflected: Vec3) -> f32 { + let specular = incident.reflect(normal); + let convergence = reflected.dot(specular); + if convergence <= 1. - self.roughness { + return 0.; + } + let c = -incident.dot(normal) * reflected.dot(normal); + if c < 0. { + return 0.; + } + 0.5 / (self.roughness * PI * (specular.dot(normal) * reflected.dot(normal)).sqrt()) + } + + fn reflect(&self, rgen: &mut impl rand::Rng, normal: Vec3, incident: Vec3) -> Vec3 { + let specular = incident.reflect(normal); + + let dist_theta = Uniform::new(0., (1. - self.roughness).acos()).unwrap(); + let dist_sphere = UnitSphere; + + loop { + let theta: f32 = dist_theta.sample(rgen); + let (xy, z) = theta.sin_cos(); + + let spherical: Vec3 = dist_sphere.sample(rgen).into(); + let off_dir = spherical.reject_from_normalized(specular).normalize(); + + let reflected = xy * off_dir + z * specular; + if reflected.dot(normal) >= 0. { + return reflected; + } + } + } +} -- 2.47.3 From c18ffd97be64ed06b61ea12f1fa9cf07ad33d803 Mon Sep 17 00:00:00 2001 From: numzero Date: Wed, 14 Oct 2026 22:04:35 +0300 Subject: [PATCH 2/3] add a screenshot --- screenshot.jpg | Bin 0 -> 85243 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 screenshot.jpg diff --git a/screenshot.jpg b/screenshot.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dd2f6d95cf2e44ae45d1ae1d836b842b09e65979 GIT binary patch literal 85243 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�=?*=ff)`+Z2U;1g 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

Ucu%lK%} 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 Date: Wed, 14 Oct 2026 22:20:16 +0300 Subject: [PATCH 3/3] add README --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 69f2a64..97c38cd 100644 --- a/README.md +++ b/README.md @@ -1 +1,5 @@ -# Photon Light +# Forward ray tracing demo + +![Screenshot](screenshot.jpg) + +A simple forward ray tracing demo. “Forward” means the rays are traced starting from the light (unlike common “reverse” ray tracing where rays are traced from the camera). -- 2.47.3