Project Information
- Category: Graphic Programming
- Language: C++
- Graphic API: OpenGL & DirectX11
- Project Date: 02 June 2023
- Made by: Sebastiรกn Valdรฉs
My first Graphic Engine ๐
Poyo Engine is a custom-built video game engine crafted entirely using C++ and OpenGL.
It is structured around components, utilising an Entity Component System (ECS) and offers various features including:
Editor Mode
Provides tools like Undo/Redo and Object Selection with the mouse.
Direct State Access (DSA)
Modifying OpenGL objects without binding them first.
Deferred Shading
Boosts performance by separating geometry and light passes.
Frustum Culling
Boosts performance by rendering only what's in the cameraโs view.
PBR Materials
Simulate realistic lighting and surface interactions for lifelike visuals.
Skeletal Animations
Allows smooth character animations with skeletal rigs.
Logger System
A robust logging system for tracking engine processes and errors.
Multi Draw Indirect
Executes multiple draw commands in a single draw call.
Gizmo Transform
Manipulate objects by rotating, translating, and scaling.
Shadows
Supports shadow maps for directional, spot, and point lights for realistic lighting.
Port To DX 11
Porting to DirectX 11 for cross-platform compatibility, like Xbox One.
![]() Water & Caustics |
![]() Skeletal Animation |
![]() Deferred Shading |
![]() PBR Materials + Emissive [inactive/active] |
Entity Component System (ECS)
The engine's architecture employs entities and components, utilising the Entity Component System (ECS) to streamline the utilisation of diverse engine elements. This approach distributes functionalities such as rendering, camera control, lighting, and transformation across distinct classes that collectively form an entity.
The system revolves around entities and components, with entities serving as containers for components, offering identification and organisation for these constituent parts.
Currently, Poyo Engine has available the following components:
- Animator
- Audio
- Billboard
- Camera
- Hierarchy
- Interface
- Light
- Static Mesh
- Skeletal Mesh
- Particle
- Render
- Text 2D
- Text 3D
- Transform
What Knowledge Have I Acquired?
This project has provided me with a robust understanding of graphics engine design principles, along with practical skills in programming, optimisation, and resolving challenges specific to game development:
- Graphics Engine Design:
- Skeletal Animations:
- Cross-Platform:
- Deferred Shading:
- User Interface and Interaction:
- Optimisation :
Mastering OpenGL and C++ for features such as deferred shading, shadows, frustum culling, PBR materials, emissive materials and IBL.
In-depth knowledge of character rigging and efficient implementation of animation controllers.
Experience in porting to DX11, providing insights into cross-platform challenges and codebase versatility.
Implementing G-buffer, lighting passes, and post-processing effects for visually stunning and performance-efficient graphics.
Designing a user-friendly UI, logger system, gizmo transform, and picking system, enhancing user experience.
A focus on performance involving efficient rendering pipelines, memory management, and algorithmic improvements.
Code Example
#include "poyo_engine.h" using namespace poyo; int main(int argc, char** argv) { //1ยบ Declare a Window variable: auto maybe_window = Window::create("Poyo Version X", 1600, 900); if (!maybe_window) return -1; Window& currentWindow = *maybe_window; //2ยบ Declare an Input variable Input& currentInput = currentWindow.getInput(); while (!currentWindow.shouldClose()) { UpdateEngine(currentWindow); //Updates Delta Time & Commands if (currentInput.isPressed(Keys::KEY_F11)) currentWindow.makeFullScreen(); //Makes Full Screen //Finally, call the render function currentWindow.render(); } return 0; }
Upcoming Enhancements
In the pipeline for PoyoEngine is the integration of a robust Physics Engine. This enhancement aims to elevate the engine's capabilities by introducing realistic physics simulations, enabling dynamic object interactions and immersive gameplay experiences.