As part of the rendering engine developement of my small engine, I have implemented PBR rendering using Vulkan API since the rendering part of the engine was on OpenGL and wanted to upgrade the infrastructure to Vulkan. In addition as a next step, wanted to integrate a simple skeletal animation system to my engine. I was able to achieve both milestones with a toy PBR renderer that I have written using Vulkan and C++. PBR renderer uses the shading model that is discussed in the article “Real Shading in Unreal Engine 4” [1].

Briefly it uses following algorithms & techniques as described in article:

  • It uses split sum approximation for calculation specular and diffuse IBL contributions as described in the paper
  • It uses Cook-Torrance BRDF model
    • Disney’s GGX/Throwbridge Reitz normal distribution function
    • Smith Model as geometry function
    • Schlick’s approximation as fresnel function

I must admit this was one of the most satisfying results I have obtained among the results that I have shared in this blog :) .

You can find the results that I have obtained from my PBR implementation below:


References:

1 - http://blog.selfshadow.com/publications/s2013-shading-course/karis/s2013_pbs_epic_notes_v2.pdf