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
- 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
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
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