I am currently learning how to write a ray tracer from the Ray Tracing in One Weekend series.
Building a simple brute-force path tracer
Adding textures, volumes (like fog), rectangles, instances, lights, and support for lots of objects using a bounding volume hierarchy (BVH)
Diving into the math of creating a very serious ray tracer