raytracer
My implementation of Peter Shirley's Ray Tracing in one weekend.
Some versions are available through different branches:
- CPU version, accelerated with OpenMP
- GPU+CPU version, accelerated with CUDA
- GPU+CPU version, accelerated with CUDA, with Open Image Denoise support
Details:
This code follows the steps of Peter Shirley's mini book series.
Features implemented so far are:
-
Cmake support
-
Multithreaded implementation with OpenMP
-
Supported output formats: PNG with STB image library and PPM
-
SDL2 for real-time display support + keyboard movement support
-
CUDA support
-
Open Image Denoise support
-
Implementation of all features included in Peter Shirley's Ray Tracing In One Weekend
- Spheres
- Surface Normals
- Antialiasing
- Diffuse Materials
- Metal
- Dielectrics
- Positionable Camera
- Defocus Blur (“depth of field”)
-
Implementation of the following features included in Peter Shirley's Ray Tracing: The Next Week
- Bounding volume hierarchy (BVH) support on CPU
- Solid texture
- Perlin noise support on CPU
Features to be implemented:
- Ray Tracing: The Next Week
- Ray Tracing: The Rest of Your Life
- Bounding volume hierarchy (BVH) support on GPU
Getting Started
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.
Prerequisites
The basic requirements for building the executable are:
- CMake 2.8+
- a C++ compiler
- make
- SDL2
Other requirements:
- CUDA support
Installation on Ubuntu
sudo apt-get install build-essentials cmake
sudo apt-get install libsdl2-dev
Installing
This program have been tested on Ubuntu 16.04 but should work under any systems that fulfills the aforementioned requirements.
Installation on Ubuntu
If you succesfully cloned the source files and you are currently in the project directory, you can generate the Makefile using the following command:
mkdir build
cd build/
cmake ..
Now you can build the binary by running:
make
Now, you should see the executable in the build folder. Examples for the final images are:
Some screenshots along the way of developing:
Built With
- SDL2 - used for display
- OpenMP - used for creating multiple threads for the tasks (pixel color calculation)
- CUDA - used for acceleration
- Open Image Denoise - used for acceleration
Authors
- Biró Enikő - BiroEniko