This is a physically based real-time renderer made for learning purposes.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

Real-Time PBR Learning Engine


This project is purely for learning purposes where I create a physically based real-time renderer and get more familiar with C++ in a graphics context.

I previously wrote a traditional forward renderer with some bells and whistles (and a lightweight entity-component-system on top) in Rust, but I'd like to start from scratch to see what this PBR hype is all about.

This engine uses a custom model format that describes materials and gives the vertex and index information of a mesh in a format easily loadable into memory. You can convert models to this format using this handy converter.

Currently there is an absence of documentation, so see for more instructions on how to use this engine.

Demo Video demo


  • Physically based material system and lighting (based on UE4). The exact material system accepts albedo, metallic, roughness, ambient occlusion, and normal maps.
  • Image based lighting.
  • MSAA with custom resolve for better HDR anti-aliasing.
  • Skyboxes.
  • Postprocess dithering to combat banding in dark scenes.
  • Custom material format for quick loading.
  • Real-time shadows.


  • Area lights.
  • More complex shadows.
  • Better GI approximation.
  • Many optimizations.
  • Animated meshes.


This project depends on a few external libraries:

  • OpenGL 3.0+
  • glfw
  • glad
  • glm
  • stb


Brian Ho