diff options
author | Julian T <julian@jtle.dk> | 2021-02-07 14:25:06 +0100 |
---|---|---|
committer | Julian T <julian@jtle.dk> | 2021-02-07 14:26:20 +0100 |
commit | 33e747fa1c0957546c10e4d7b490ac7fbb0fd2d2 (patch) | |
tree | 515b2b2e017329cbcada60e898fb5795fbceb5cd /src/trace/pathtrace.rs | |
parent | a43ab40a75e9d4c6ee3fbdd583bc93574db19124 (diff) |
Abstracted lambertian into material
Diffstat (limited to 'src/trace/pathtrace.rs')
-rw-r--r-- | src/trace/pathtrace.rs | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/src/trace/pathtrace.rs b/src/trace/pathtrace.rs index 32a8e15..a3a688a 100644 --- a/src/trace/pathtrace.rs +++ b/src/trace/pathtrace.rs @@ -20,11 +20,10 @@ impl PathTracer<'_> { pub fn trace_recur(&self, sampler: &mut dyn Sampler, ray: &Ray) -> Spectrum { - if let Some(i) = self.scn.intersect(ray) { - // Get a random direction in the hemisphere a i.p - // This is Lambertian reflection - let target = i.p + i.n + sampler.get_unit_vector(); - return self.trace_recur(sampler, &Ray::new_to(i.p, target)) * 0.5; + if let Some((mat, i)) = self.scn.intersect(ray) { + if let Some((scalar, nray)) = mat.scatter(ray, &i, sampler) { + return self.trace_recur(sampler, &nray) * scalar; + } } // Simulates a sky |