Skip to content

wpsimon09/Pablo-Renderer

Repository files navigation

Pablo rendering engine

As title suggests Pablo is a rendering engine and OpenGL abstraction framework that supports PBR materials and 3D models together with Image based lightning

It provides fast and convenient way of rendering various geometry with different materials

This renderer is build using

GLFW for window management

GLM for mathematics

GLAD for OpenGL functions initialization

Assimp for model loading

Dear imgui for UI

Features

  • PBR shaders
  • IBL (Image based lighting)
  • Model loaders
  • Support for Normal mapping using normal maps in tangent space
  • Anti aliasing up to 16x pixel samples
  • Instance rendering
  • Transparent grid
  • SkyBox
  • Debug view for textures or frame buffer textures
  • Flexible class structure
  • SceneGraph design pattern
  • Orbit camera
  • Shadow mapping
  • UI editor
  • Model Loading from UI
  • Area lights with LTCs (Linearly transform cosines)
  • Screenshots of different render passes

Example

To create sphere using IBL within the framework the code would look like this

//create an instance of PabloRenderer
auto pabloRenderer = PabloRenderer::getInstance();
pabloRenderer->init();

//create and ran IBL pipeline
auto iblPipeLine = std::make_shared<IBLPipeLine>("Assets/Textures/HDR/hill.hdr");
iblPipeLine->generateIBLTextures();

//load model 
auto pot = std::make_unique<ModelSceneNode>("Assets/Model/pot/brass_pot_01_2k.gltf");
pot->transformation->setScale(4.0f, 4.0f, 4.0f);
pot->castsShadow(true);

//create scene
std::shared_ptr<Scene> scene = std::make_shared<Scene>();

//attach IBL pipeline to have image based lightning
scene->setIblPipeLine(iblPipeLine);

//attach scene to the PabloRenderer
pabloRenderer->attachScene(scene);

//render the attached scene
pabloRenderer->render();

The result of the snippet will look like this (after small alterations using UI)

Or we can simply do it via UI by clicking Add new button and following instructions on the screen

img.png

As of now renderer's shader only support one directional light and 1 area light if selected which is going to change in the near future

Images

Pablo

Area light

Video

pablo-showcase.webm