For the required features, I didn't have time to finish that by the deadline, although I just written the needed functions, and didn't debug them.
Optional features:
1. motion blur. I move the object according to time, and then blend those images together. The speed is changing with time.
2. Depth of field. Find the focus point, jitter the camera and then generate a new ray. The middle sphere is the focus. The near and further one become blur.
3. refraction. I use fresnel to calculate the reflection and refraction coefficient.
Limitations:The convergence speed is very slow.