diff --git a/assignment-1c/examples/Hw1cSample1.txt b/assignment-1c/examples/Hw1cSample1.txt
index 3411fc7..c286de0 100755
--- a/assignment-1c/examples/Hw1cSample1.txt
+++ b/assignment-1c/examples/Hw1cSample1.txt
@@ -14,4 +14,4 @@ v 1 -1 -4
v 2 1 -6
f 1 2 3
-f 1 3 4
\ No newline at end of file
+f 1 3 4
diff --git a/assignment-1c/examples/soft-shadow-demo.txt b/assignment-1c/examples/soft-shadow-demo.txt
new file mode 100644
index 000000000..279e3f1
--- /dev/null
+++ b/assignment-1c/examples/soft-shadow-demo.txt
@@ -0,0 +1,45 @@
+imsize 640 480
+eye 0 0 15
+viewdir 0 0 -1
+hfov 60
+updir 0 1 0
+bkgcolor 0.5 0.5 0.5
+
+depthcueing 0.5 0.5 0.5 1 0.4 60 0
+
+light 10 10 -10 1 1 1 1
+
+mtlcolor 0.5 1 0.5 1 1 1 0.2 1 0.1 5
+sphere 4.5 4.5 -20 4.5
+sphere -4.5 -4.5 -20 4.5
+
+mtlcolor 1 0.5 0.5 1 1 1 0.2 0.8 0 5
+sphere -10 0 -30 4
+sphere -20 0 -30 4
+sphere -30 0 -30 4
+sphere -40 0 -30 4
+sphere 0 0 -30 4
+sphere 10 0 -30 4
+sphere 20 0 -30 4
+sphere 30 0 -30 4
+sphere 40 0 -30 4
+
+sphere -10 -10 -30 4
+sphere -20 -10 -30 4
+sphere -30 -10 -30 4
+sphere -40 -10 -30 4
+sphere 0 -10 -30 4
+sphere 10 -10 -30 4
+sphere 20 -10 -30 4
+sphere 30 -10 -30 4
+sphere 40 -10 -30 4
+
+sphere -10 10 -30 4
+sphere -20 10 -30 4
+sphere -30 10 -30 4
+sphere -40 10 -30 4
+sphere 0 10 -30 4
+sphere 10 10 -30 4
+sphere 20 10 -30 4
+sphere 30 10 -30 4
+sphere 40 10 -30 4
diff --git a/assignment-1c/src/lib.rs b/assignment-1c/src/lib.rs
index db5634b..e2b448e 100644
--- a/assignment-1c/src/lib.rs
+++ b/assignment-1c/src/lib.rs
@@ -1,5 +1,3 @@
-#![doc = include_str!("../README.md")]
-
use nalgebra::Vector3;
#[macro_use]
diff --git a/assignment-1c/src/main.rs b/assignment-1c/src/main.rs
index be5cf87..a2bebc2 100644
--- a/assignment-1c/src/main.rs
+++ b/assignment-1c/src/main.rs
@@ -91,7 +91,7 @@ fn main() -> Result<()> {
.iter()
.enumerate()
.filter_map(|(i, object)| {
- match object.kind.intersects_ray_at(&ray) {
+ match object.kind.intersects_ray_at(&scene, &ray) {
Ok(Some(t)) => {
// Return both the t and the sphere, because we want to sort on
// the t but later retrieve attributes from the sphere
diff --git a/assignment-1c/src/scene/cylinder.rs b/assignment-1c/src/scene/cylinder.rs
index dc3541e..960c6ba 100644
--- a/assignment-1c/src/scene/cylinder.rs
+++ b/assignment-1c/src/scene/cylinder.rs
@@ -7,6 +7,7 @@ use crate::Vector;
use crate::{ray::Ray, Point};
use super::illumination::IntersectionContext;
+use super::Scene;
#[derive(Debug)]
pub struct Cylinder {
@@ -23,6 +24,7 @@ impl Cylinder {
/// If there is no intersection point, returns None.
pub fn intersects_ray_at(
&self,
+ _: &Scene,
ray: &Ray,
) -> Result