As title suggests Pablo is a rendering engine and OpenGL abstraction framework that supports PBR materials and 3D models together with Image based lightning, Screen Space Reflections and more.
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 parsing
Dear imgui for UI
- PBR shaders
- IBL (Image based lighting)
- Screen space reflection using real time ray marching
- Model loaders
- Support for Normal mapping using normal maps in tangent space
- Anti aliasing
- Transparent grid
- SkyBox
- Pixel picking
- 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
- Realtime change of Attached materials
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 run 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
pablo-showcase.webm
development of Pablo has ended as I plan to rewrite it using Vulkan and use different structure of the code which would be quite difficult to implement in this code base
Pablo Renderer will return