Physically based offline path tracer made in Vulkan with Ray Tracing Pipeline extension. It uses energy conserving BSDF with Diffuse, Dielectric, Metallic and Glass lobes + volumetric scattering. Renders can also be saved as png images.
- Windows 10 with MSVC or Linux with GCC (Only debian 12 with GCC 12.2 is tested)
- Either NVIDIA RTX 2000+ series or AMD RX 6000+ series to support all of the extensions below. You may check whether they're present on your device here, maybe it's possible to run on some older hardware.
- VK_KHR_ray_query
- VK_KHR_acceleration_structure
- VK_KHR_ray_tracing_pipeline
- VK_KHR_swapchain
- VK_KHR_deferred_host_operations
- Vulkan SDK.
- Cmake 3.12
- C++ 20
git clone --recursive https://github.com/Zydak/Vulkan-Path-Tracer
cd Vulkan-Path-Tracer
mkdir build
cd build
cmake ..
Then open generated Visual Studio solution and build.
git clone --recursive https://github.com/Zydak/Vulkan-Path-Tracer
cd Vulkan-Path-Tracer
mkdir build
cd build
cmake ..
make
Executable will be in build/PathTracer/VulkanPathTracer
.
- BSDF with importance sampling
- Energy compensation implemented according to [Turquin 2018] paper.
- HDR Environment Maps with importance sampling
- NEE for environment map light
- Volumetric scattering with importance sampling implemented according to Production Volume Rendering 2017
- Multiple Importance Sampling implemented according to Optimally Combining Sampling Techniques for Monte Carlo Rendering
- Textures and Normal Maps
- Editor
- Changing material and path tracing properties at runtime
- Loading your own scenes in any format supported by assimp
- Exporting renders into .PNG files
- Post Processing
- Bloom using Mip Maps
- ACES tonemapping
- Anti Aliasing
- Depth of Field
- Russian roulette
If you're interested in details of the implementation of these features, look at Project Overview.
- Sampling the GGX Distribution of Visible Normals
- Microfacet Models for Refraction through Rough Surfaces
- Importance Sampling Microfacet-Based BSDFs using the Distribution of Visible Normals
- A Reflectance Model For Computer Graphics
- Practical multiple scattering compensation for microfacet models
- Production Volume Rendering 2017
- Optimally Combining Sampling Techniques for Monte Carlo Rendering
- Scratch a pixel article on volumes
- https://developer.nvidia.com/orca/amazon-lumberyard-bistro - Bistro
- https://www.intel.com/content/www/us/en/developer/topic-technology/graphics-research/samples.html - Sponza
- https://sketchfab.com/3d-models/screaming-dragon-head-3d-print-5712b52618f743b193bdd39459099f25 - Screaming Dragon Head
- https://sketchfab.com/3d-models/dog-statue-49d97ca2fbf34f85b6c88ae8ebc7514f - Dog Statue
- https://github.com/mmacklin/tinsel - Ajax
- https://polyhaven.com/hdris - Env Maps
- https://benedikt-bitterli.me/resources/ - Dragon
- https://wirewheelsclub.com/models/1965-ford-mustang-fastback/ - Mustang
- https://renderman.pixar.com/official-swatch - RenderMan teapot
- https://www.cgbookcase.com/ - Textures for teapots
- https://casual-effects.com/g3d/data10/ - Breakfast Room
- https://luxcorerender.org/example-scenes/ - Cannele & Fromage