Skip to content
A physically-based renderer utilizing vulkan raytracing api.
C++ GLSL CMake C
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.


Type Name Latest commit message Commit time
Failed to load latest commit information.


A physically-based renderer utilizing vulkan raytracing api.

The Toilet Scene Fireplace Room


At this moment, the application accepts OBJ format for loading models and HDR format for environment map. It guesses the ggx parameters from MTL file provided along with OBJ. Roughness values are mapped from specular exponents (Ns values) using Blinn-Phong to microfacet mapping mentioned in Brian Karis' blog.

As I do not have much time at this moment, changing the scene requires you to modify the code by yourself. An example is in "src/main.cpp"

There are two pathtracers in the system. PathTracer class is quite slow but I am certain that it definitely produces correct result. FastPathTracer class is much faster but does not take care of BSDF (only BRDF) and handled edge cases through several assumptions.


In its current early stage, it supports:

  • Environment map importance sampling
  • Alpha-testing
  • Ambient occlusion Integrator
  • Path tracer with next event estimation utilizing MIS Veach's thesis [1997]
  • Low discreprancy sampler with blue-noise property from Heitz et al. [2019]
  • PCG random number generator ported from
  • Lambert diffuse BRDF
  • GGX Microfacet BSDF (rough conductor and rough dielectric)
  • FPS-style camera for traversing the scene


  • vulkan sdk
  • glslang (included as a submodule)
  • tinyobjloader (included as a submodule)
  • glfw (included as a submodule)
  • stb (included as a submodule)
  • glm (included as a submodule)


  • Implement one indirect ray, two shadow rays + path mollification which seems to be a standard in denoising papers. For instance Chaitanya et al. [2017] and Scheid et al. [2017]
  • Implement ASVGF


  1. Rough dielectric (frosty glass), especially PDF evaluation, was not tested properly. It might not produce correct result if such material is used.
  2. The application will crash while exitting due to an unhandled GLFW surface destructor. I believe there is a way to handle this properly with newer vulkan versions. I will thus revisit this issue in the future.

I started this project around early of March since I was curious of the vulkan raytracing performance. On the first day of this project, I spent an entire day building a new PC to house RTX2060. This is probably the most costly project I ever invested with my own money. :(

You can’t perform that action at this time.