Aguados Engine
Project information
Summary
Graphics Engine made from scratch during our 3rd year of HND in Computing on ESAT. The main focus of this project was to learn some basic graphics programming, but specially learn about C++ and engine advanced techniques.
I continued the development in Shieffield Hallam University with the idea of creating an abstraction layer and being able to compile it to OpenGL and DirectX 12 with the same code.
Engine Features
ECS System
Entity-Component-System for managing game objects. Functionality to register component types, create and access components, and add/remove entities.
Deferred Shading
Advanced rendering technique for handling multiple lights efficiently.
Separates geometry rendering from lighting, allowing for a large number of dynamic lights with minimal
performance impact.
Stores scene attributes in multiple render targets (G Buffer) for later lighting calculations.
Physics using PhysX
Realistic physics simulation powered by NVIDIA PhysX.
Supports rigid body dynamics, including collision detection and response.
Implements realistic gravity and friction for accurate physical interactions.
Sound System
Integrated OpenAL for high-quality, cross-platform audio support.
Supports 3D spatial sound, enabling realistic audio positioning.
Allows multiple sound sources with independent volume, pitch, and panning controls.
Instancing
Implements hardware instancing to efficiently render large numbers of identical objects.
Reduces CPU overhead by minimizing draw calls and batching similar objects.
Fully integrated with the engine’s rendering pipeline for seamless use.
Model and Texture loading
Implements efficient texture loading using stb_image for formats like PNG, JPG, TGA, and DDS.
Uses TinyObj to load OBJ formats models
Provides an asset management system for organizing and reusing models and textures.
Job System
Implements a thread pool for efficient task scheduling and execution.
Supports asynchronous task execution, reducing CPU bottlenecks.
Ideal to reduce data loading times
Framebuffer
Implements an efficient framebuffer system for off-screen rendering and post-processing effects.
Supports multiple render targets (MRT) for advanced effects such as deferred shading and shadow
mapping.
Dynamic framebuffer adjustments via the ImGui editor, allowing live modification of framebuffer size and
position during development for real-time feedback and fine-tuning
Custom Math Library
Provides essential mathematical operations for vectors and matrices.
Implements a range of functions for linear algebra, such as dot products, cross products, and matrix
multiplication.
Supports 4x4 matrices for transformation, projection, and view matrix calculations in 3D rendering.
Camera
Supports free-flight mode, allowing full control over position and orientation in 3D space.
Integrates view matrices and projection matrices for accurate camera transformations.
Allows camera control via keyboard, mouse, or gamepad for flexible user input.
Editor
Fully integrated ImGui editor for intuitive in-engine development and debugging.
- Graph-based scene editing
- Entity Component System support
- Scene loading features
- Post-processing effects
- Supports real-time configuration changes
- Gizmos for intuitive scene manipulation
- Supports window docking and layout management
- Integrated with the engine’s asset pipeline for seamless updates and management of textures, models, and other assets.t
Forward Rendering
Supports single-pass rendering of all scene objects with direct lighting and shading calculations.
Designed for flexibility, allowing custom shaders and lighting models to be applied to materials and
objects.
Phong
Implements the Phong shading model for realistic and smooth lighting on 3D surfaces.
Ambient, diffuse, and specular lighting components are calculated per pixel to achieve high-quality
lighting effects.
Optimised calculation blending the results allowing lighting passes
Shadow Mapping
Implements shadow mapping for real-time dynamic shadows, providing realistic depth and realism to 3D
scenes.
Supports directional, point, and spotlight shadows, allowing accurate shadows for various light types.
Stencil-based shadows for objects casting shadows in specific areas, such as spotlights or point lights.
Input Handling
Implements comprehensive input handling for keyboard and gamepad devices.
Supports custom key bindings for flexible control schemes and configurations.
Action Mapping allows input actions to be bound to specific game functions, supporting both keyboard keys
and controller buttons.
Scene management
Implements a data-driven scene streaming system for efficient loading and unloading of game world
assets