This project extends the ray tracer developed in Homework 3. It implements some of the ray tracing topics we have covered, namely:
- ray casting
- shading
- anti-aliasing
- light sources
- acceleration structures
For this homework, you must
- have a working solution to Homework 3
- know how to read and write object oriented code in C++
- understand the concepts listed above
- know how to compile a C++ project spanning multiple files in multiple directories
- know vector arithmetic
The problems are defined in proj2.tex
which is to be compiled using a LaTeX compiler.
Based on feedback from the last set of students that attempted this assignment, the number of hours that your team will require to complete this homework are as follows.
- (min, max) : (37, 160)
- (mean, median, st.dev.) : (83.6, 50, 47.1)
A summary of the feedback on this project from last year is included in old-feedback.md
. It did not have the "Improvement" question. Similar comments have been merged and condensed and some comments specific to the offering have been redacted. Based on the feedback, a longer time period is assigned with ample time after final exams.
There are 2 parts to the submission.
Submit all code files in the raytracer
folder. World.cpp
should #include
the relevant file from the build
folder corresponding to the high-res version of your showcase scene. Other World::build
implementations (e.g. for the low-res version, or used to generate other pictures on your web page) should be included in the build
folder. Compiling and running raytracer.cpp
in the raytracer
folder should generate the high-res image.
Include a website
folder that includes your website, either as HTML, markdown, or a URL. The submitted web page must be complete, i.e. all the required assets are submitted and no links are broken.
This is a team submission on GitHub and contributes to your Submission Score.
Deadline: 2359h on Sunday, 19 December
You will provide feedback on your buddies and on the project. The feedback form will be available on LMS with further instructions and will be due at the same time as the problem set.
This is an individual submission on LMS and contributes to your individual Team Factor which is 1 by default and penalized for non-submission of the feedback or non-participation in the team as assessed through peer feedback or GitHub contribution.
Deadline: 2359h on Sunday, 19 December
Your submission will be graded as per the criteria specified in the accompanying file, rubric.xlsx. This will contribute to your Submission Score.
Your individual score in this homework is the product of your Submission Score and Team Factor.
Please find useful resources for the project on the Project 2 Resources page on LMS.
The engine can be extended ad infinitum. Below are some recommendations but these need not limit you.
- adding interesting materials
- adding texturing
- adding optical effects
- adding a variety of acceleration structures
- implementing parallelization
- adding bump or normal mapping
- adding sophisticated ray tracers
There is a lot to handle and there are bound to be confusions and queries. Please utilize the following avenues.
There is a lot to handle and there are bound to be confusions and queries. Please share them using the following avenues.
- discuss with your buddies,
- the corresponding discussion thread on LMS,
- discuss with your peers,
- consult with course staff.
- Do not include identifying information in your submission.
- Only include images which you are comfortable sharing publicly.
- There is no late submission. Submit whatever you have by the deadline.
- viel Spaß!
Make sure g++
is added to your PATH
. You can check by typing g++ --version
in your terminal and hitting enter. If you see the version number, all is well. Otherwise, please config your environment variables before proceeding any further.
You can also swap the build function using the given world:build functions in build folder and further tweak the parameters using SimulationParameters.hpp
Change your current working directory to raytracer
and run the following:
g++ raytracer.cpp "cameras/Parallel.cpp" "cameras/Perspective.cpp" "geometry/Sphere.cpp" "geometry/Triangle.cpp" "geometry/Plane.cpp" "geometry/Geometry.cpp" "materials/Cosine.cpp" "samplers/Sampler.cpp" "samplers/Simple.cpp" "utilities/BBox.cpp" "utilities/helpers.cpp" "utilities/Image.cpp" "utilities/Point3D.cpp" "utilities/Vector3D.cpp" "utilities/Ray.cpp" "utilities/RGBColor.cpp" "utilities/ShadeInfo.cpp" "world/World.cpp" "world/ViewPlane.cpp" "lenses/Lens.cpp" "lights/Light.cpp" "acceleration/Accelerator.cpp" "materials/Wall.cpp" "materials/Matte.cpp" "materials/Glossy.cpp" -o main.exe
Finally, execute main.exe
to run the raytracer.
The following link showcases all our work:
https://owais2399.github.io/pipeline-raytracer/