← Home

This assignment has two parts -- part (a) and part (b) -- due at different times.

Part (a): Basic Raytracer

Due: Sun Sep 4, 23:59:59 IST

Assignment Description

You will write a raytracer in this assignment. This is also your proverbial trial by fire, your initiation rights, your first claim as a graphics professional -- raytracers are the bread and butter of high quality rendering. Good luck!

IMPORTANT: To complete this project, you need to read the PDF instructions. Without it this assignment will be extremely hard! Please save yourself and us the trouble and read it fully. Also refer to the background reading if necessary.


Find the instructions for this assignment in PDF here.

You need to complete all the functions whose body contains IMPLEMENT_ME. Note that while these functions will trigger errors if you call them without replacing them with your own code, not all of them are called by the default skeleton code. This means you may miss some parts that you have to work on. Hence, please search for all instances of IMPLEMENT_ME and make sure you've addressed each one (except the ones in the Triangle class, those are for 3(b))!

Skeleton Code

Download here.


We require you to correctly render scene{1..5}.scd. Note that there're more .scd files than we require you to render. Those are for A3(b), to be posted later below. Here are the 5 raytraced images you will be generating (for trace depth 2):

Scene 1: (3 primitives)
Scene 2: (3 primitives)
Scene 3: (1000 primitives, takes time to render)
Scene 4: (5 primitives)
Scene 5: (47 primitives)

Here is a breakdown of the different lighting effects inside Scene 1:

Ambient Component Only
Lambertian Component Only
Specular Component Only
Ambient and Specular

Submission Instructions

You need to submit just your source code. Do a "make clean", zip your src folder, and upload it on Moodle. Do not upload anything else, not even a Readme. Do not change any of the function signatures in the skeleton code (we will test them automatically), though you can add new functions/classes as needed.

Part (b): Advanced Raytracing

Due: Sun Oct 2, 23:59:59 IST

Assignment Description

This part of the assignment is open-ended. You need to add THREE POINTS worth of non-trivial advanced features to your raytracer from part (a). You're free to choose what you want to implement, but if it's not on the list below, check with me in advance to figure out how many points it counts for. Here are some suggestions. For some of these, you may need to write your own .scd files, extend the .scd format, or specify the input in some other clean way (avoid hardcoding it in the code if possible). You may make any changes to the code you need.

Grading Scheme

33.3% for every implemented point, clamped to a maximum of 150%.

Submission Instructions

Please submit a zip of your assignment directory, containing:

Do NOT submit object/executable files. Run make clean before zipping.


The inspiration for the structure of this project, and sections of the source code, came from Niels Joubert and James Andrews' framework for Berkeley's CS184 Intro to Graphics course.