In this homework we aim to learn the basics of image synthesis by implementing a simple, naive, path tracer. In particular:
- setup camera and image synthesis loops,
- usa ray-intersection queries,
- write simple shaders,
- write a naive path tracer with simple sampling.
(The original readme of the homework can be found as readme.html
)
The code uses the library Yocto/GL,
that is included in this project in the directory yocto
.
In order to compile the code, you have to install
Xcode
on OsX, Visual Studio 2019 on Windows,
or a modern version of gcc or clang on Linux,
together with the tools cmake and ninja.
The script scripts/build.sh
will perform a simple build on OsX.
Main functionalities are implemented in yocto_raytrace.cpp
.
This repository also contains tests that are executed from the command line
as shown in run.sh
. The rendered images are saved in the out/
directory.
The results should match the ones in the directory check/
. High resolution
images are computed by run-highres.sh
.
In this homework/project the following features are implemented:
- Main Rendering Loop in function
raytrace_samples()
- Color Shader in function
shade_color()
- Normal Shader in function
shade_normal()
- Texcoord Shader in function
shade_texcoord()
- Eyelight Shader in function
shade_eyelight()
- Raytrace Shader in function
shade_raytrace()
- Thick lines and points (hard): the rendering of points and lines was
too approximate; in this project we will compute these intersections accurately
- render points as spheres and lines as capped cones using the following algorithms found here with names Sphere and Rounded Cone.
- Extra details (implementation and test images) on this part are discussed in
report.md