Path tracers trace paths of light through scenes to render images. Most path tracers today use geometric optics, which assumes that light travels along rays.
Diffuse Reflection: Lambertian modelA small implementation of a path tracer from the project VK Mini Path Tracer of NVIDIA's public repository, using C++, GLSL, Vulkan and NVIDIA's graphics helper libraries.
This repository is purely for educational purposes with some personal notes made along the way to try to understand the basics of Computer Graphics and Vulkan, GLSL, and C++ projects.
- Place nvpro_core inside the main directory path_tracer_vulkan of the repository
## Download the repository
git clone https://github.com/weslleyskah/path_tracer_vulkan.git
## Download NVIDIA static libraries for graphics
git clone https://github.com/nvpro-samples/nvpro_core.git ## CMAKE GUI
source: .../path_tracer_vulkan/vk_mini_path_tracer
build: .../path_tracer_vulkan/vk_mini_path_tracer/build
add entry: “Name” = CMAKE_BUILD_TYPE, “Type” = STRING, “Value” = Debug
configure: default x64
configure - generate - open project## VS Studio
## Set as startup project to avoid 'Access is denied' error
vk_mini_path_tracer_edit.sln- Open the solution file on VS Studio to compile the project.
- Run the .exe file inside the
bin_x64/debugfolder. - The output of the path tracer will be on the file
out.hdr
.../path_tracer_vulkan/vk_mini_path_tracer/build/vk_mini_path_tracer_edit.sln
.../path_tracer_vulkan/bin_x64/Debug/vk_mini_path_tracer__edit.exe
.../path_tracer_vulkan/bin_x64/Debug/out.hdr- Need to rebuild every time the shader file (raytrace.comp.glsl) is modified.
## CMAKE GUI
source: .../path_tracer_vulkan/vk_mini_path_tracer
build: .../path_tracer_vulkan/vk_mini_path_tracer/build
configure, generate, open project
## Visual Studio
Set vk_mini_path_tracer as startup project
Compile main.cpp
## File Explorer
Run .../path_tracer_vulkan/bin_x64/Debug/vk_mini_path_tracer__edit.exe
See the output .../path_tracer_vulkan/bin_x64/Debug/out.hdr on GIMP
## GIMP
Open out.hdr on GIMPNote 1: Try python-cuda.
Note 2: Study the code-base.
Darker values are closer, and brighter values are further away. When the ray cast finishes, the rayQuery stores the closest intersection (the intersection with the lowest t-value), and t is the depth of the scene along the ray, ranging from 0 to 1.
The value t specifies the distance along the ray's direction vector from its origin to the point of intersection.
The imageData[linearIndex] = vec3(t / 10.0) takes the calculated t value, scales it, and assigns it to all three color channels (Red, Green, and Blue). This creates a grayscale image where the brightness of each pixel is determined by the t value of the ray intersection.
Each point on the triangle has a unique set of barycentric coordinates with a unique intersection point between the ray and the triangle, given by the formula: p = (1-u-v)*v0 + u*v1 + v*v2, where v0, v1, and v2 are the vertices and (1-u-v), u, and v are the barycentric coordinates.
- Ray Tracing Gems
- Ray Tracing in One Weekend
- Book of Shaders
- Physically Based Rendering - Diffuse Reflection
path_tracer_vulkan Main directory
path_tracer_vulkan/nvpro_core NVIDIA library
path_tracer_vulkan/vk_mini_path_tracer Source code + Build
path_tracer_vulkan/vk_mini_path_tracer/build/vk_mini_path_tracer.sln Solution file
path_tracer_vulkan/vk_mini_path_tracer/_edit Source code: main.cpp + shader
path_tracer_vulkan/bin_x64/Debug Executable (.exe) files


