Engine for generating physically based renderings. The whole project is divided into two main parts; rasterizer and pbrenderer. The first part implements a few basic GLSL shaders for visualising normals with flat and smooth shading, additionally, mouse picking and normal ray casting is added. A user can fly around the scene freely using the following buttons: W, S, D, A and left mouse button. Finally, place the camera in a selected position in the world space and render an image using R or C button. The former has to be pressed to physically based render a scene and the latter to ray cast normals. The biggest part of this project is pbrenderer.
To run the project Visual Studio is needed. Render images are saved in the folder output which is created in the repository root automatically. The example of a configuraiton file is in the folder with the same name.
Use vcpkg to install the following packages:
1) glad_x64-windows
2) glfw3_x64-windows
3) glm_x64-windows
4) stb_x64-windows
5) zlib_x64-windows
6) rapidjson_x64-windows
Run command to install all:
vcpkg install glad_x64-windows glfw3_x64-windows glm_x64-windows stb_x64-windows zlib_x64-windows rapidjson_x64-windows
1) Whitted
2) Direct light
3) Path tracer with MIS
1) Area light
2) Point light
3) Environment light
1) Lambertian
2) Perfect specular
3) Perfect transmit
4) Plastic
5) Glass
6) Metal
It took around 10-15 minutes per image [8 threads].
Material: gold
Distribuion: GGX with alpha 0.15
Resolution: [900x700]
SPP: 1536
Rays max depth: 10
Material: plastic
Distribuion: GGX with alpha 0.55
Lambertian material + Microfacets reflection
Resolution: [900x700]
SPP: 1536
Rays max depth: 10
Material: glass
IOR 1.5
Resolution: [900x700]
SPP: 3000
Rays max depth: 10
Material: plastic and glass sphere
IOR 1.5
Resolution: [900x700]
SPP: 3100
Rays max depth: 10