diff --git a/renders/checkered_floor.png b/renders/checkered_floor.png index ea630e0..b5ffc77 100644 Binary files a/renders/checkered_floor.png and b/renders/checkered_floor.png differ diff --git a/renders/cornell_box.png b/renders/cornell_box.png index c6667d5..236a479 100644 Binary files a/renders/cornell_box.png and b/renders/cornell_box.png differ diff --git a/renders/mirror_ball.png b/renders/mirror_ball.png index 9a6d763..ceb213d 100644 Binary files a/renders/mirror_ball.png and b/renders/mirror_ball.png differ diff --git a/renders/scene.png b/renders/scene.png index faf7878..fee1567 100644 Binary files a/renders/scene.png and b/renders/scene.png differ diff --git a/src/scene/mod.rs b/src/scene/mod.rs index e013d97..9b4bf79 100644 --- a/src/scene/mod.rs +++ b/src/scene/mod.rs @@ -104,9 +104,16 @@ impl Scene { return Vec3::new([0.0, 0.0, 0.0]); } } - // let falloff = 1.0 / (distance_to_light * distance_to_light); - // light.color().scale(falloff) - light.color() + let constant_term = 1.0; // Prevents division by zero at very close distances + let linear_term = 0.1; // Linear falloff factor + let quadratic_term = 0.01; // Quadratic falloff factor (original inverse square law) + + let falloff = 1.0 + / (constant_term + + linear_term * distance_to_light + + quadratic_term * distance_to_light * distance_to_light); + + light.color().scale(falloff) } pub fn from_toml(toml: &Value) -> Self { diff --git a/tests/sample_test.png b/tests/sample_test.png index 4ba9fb5..47de184 100644 Binary files a/tests/sample_test.png and b/tests/sample_test.png differ