From 91473f08aef45434f3d52f8ff09f6868d87f38ac Mon Sep 17 00:00:00 2001 From: numzero Date: Thu, 20 Nov 2025 13:10:21 +0300 Subject: [PATCH] use generic reflector for final computation --- src/lib.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 5195e03..5d2fc5d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -9,7 +9,7 @@ use crate::{ camera::OrbitalCamera, ray::Ray, render::lines::{LookParams, Mesh, Pipeline, Vertex}, - trace::{Hit, Scene, Source, Sphere}, + trace::{Hit, Lambertian, Reflector, Scene, Source, Sphere}, }; mod camera; @@ -255,9 +255,13 @@ impl Core { if d2 > 9. * sigma2 { continue; } + assert!(hit.normal.is_normalized()); assert!(hit.incident.dir.is_normalized()); + let reflector = Lambertian; let in_lm = 1.0; - let out_cd = in_lm * hit.normal.dot(-hit.incident.dir) / PI; + let out_cd = in_lm + * hit.normal.dot(-hit.incident.dir) + * reflector.brdf(hit.normal, hit.incident.dir, -ray.dir); let weight = accum_normalizator * (-0.5 * d2 / sigma2).exp(); total_cd += weight * out_cd; }