My first Graphics 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.
Features
🖥️🔄🖱️
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. Gallery
Water & Caustics
Skeletal Animation
Deferred Shading
PBR Materials + Emissive
Entity Component System (ECS)
Entities are the core game objects, and components define their behaviour. The available components are:
🎬 Animator
🔊 Audio
🪧 Billboard
📷 Camera
👨👧👦 Hierarchy
🖥️ Interface
💡 Light
🧱 Static Mesh
🦴 Skeletal Mesh
✨ Particle
🎨 Render
🔤 Text 2D
🔠 Text 3D
📐 Transform
What Knowledge Have I Acquired?
🎨🖥️
Graphics Engine Design
Mastering OpenGL and C++ for features such as deferred shading, shadows, frustum culling, PBR materials, emissive materials and IBL. 🎬💀
Skeletal Animations
In-depth knowledge of character rigging and efficient implementation of animation controllers. 🔀🖥️
Cross-Platform
Experience in porting to DX11, providing insights into cross-platform challenges and codebase versatility. 🌓🎨
Deferred Shading
Implementing G-buffer, lighting passes, and post-processing effects for visually stunning and performance-efficient graphics. 🖱️🛠️
User Interface and Interaction
Designing a user-friendly UI, logger system, gizmo transform, and picking system, enhancing user experience. ⚡📊
Optimisation
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.