Sebastián Valdés

Category: Graphics Programming

Language: C++20

Graphic API: OpenGL 4.6 & DirectX11

Project Date: 02 June 2023

Made by: Sebastián Valdés

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

Water and caustics rendering

Skeletal Animation

Skeletal animation system

Deferred Shading

Deferred shading with multiple lights

PBR Materials + Emissive

PBR materials with 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.