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:
  • 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.