A modern C++20 game engine built for high-performance graphics and gameplay, featuring a Vulkan Deferred Renderer, Entity-Component-System architecture, and Jolt Physics.
I'm building this engine to learn and experiment with modern rendering architecture (Vulkan, Render Graphs, GPU-driven rendering) and engine design patterns.
Note: This project is currently in active development. The renderer has been recently migrated from OpenGL to Vulkan.
⟳ Vulkan Deferred Renderer: The rendering backend has been completely rewritten using Vulkan 1.3. It now features a state-of-the-art Deferred Rendering pipeline with G-Buffer, Cascaded Shadow Maps, and TAA.
- Entity-Component-System (ECS) - Powered by EnTT for maximum performance and flexibility.
- Physics Integration - Rigid body dynamics and character controllers using Jolt Physics.
- Audio System - 3D spatial audio using miniaudio.
- Action-Based Input - Abstract input mapping for keyboard, mouse, and gamepad.
- Memory Management - Custom memory arenas and allocators.
- Deferred Rendering Pipeline - Optimized G-Buffer layout (Albedo, Normal, ARM, Emission, Velocity).
- Vulkan RHI - Modern Render Hardware Interface abstracting Vulkan complexity.
- PBR Lighting - Physically Based Rendering with image-based lighting (IBL).
- Shadows - Cascaded Shadow Maps (CSM) with PCF filtering.
- Global Illumination - (Planned) Ray-traced or probe-based GI.
- Post-Processing
- TAA - Temporal Anti-Aliasing with jittering.
- SSR - Screen-Space Reflections.
- SSAO - Screen-Space Ambient Occlusion.
- Bloom - High-quality bloom with downsampling/upsampling.
- Tonemapping - ACES / Filmic tonemapping.
- Asset Pipeline - Asynchronous asset loading and processing (glTF models, KTX textures).
- ImGui Editor - In-game editor for scene manipulation, entity inspection, and performance profiling.
- Scene Serialization - JSON-based scene saving/loading.
- Hot Reloading - Shader re-compilation and asset reloading at runtime.
- CMake 3.25+
- C++20 Compiler (MSVC 2022, Clang 16+, GCC 13+)
- Vulkan SDK 1.3+
- Git
# Clone the repository
git clone https://github.com/jackthepunished/horizon-engine.git
cd horizon-engine
# Configure
cmake -B build -DCMAKE_BUILD_TYPE=Release
# Build
cmake --build build --parallel
# Run
./build/bin/horizon_game| Key | Action |
|---|---|
W/A/S/D |
Move |
Mouse |
Look around |
Shift |
Sprint |
Space |
Jump |
Ctrl |
Crouch |
Tab |
Toggle Cursor |
F3 |
Debug Stats |
F1 |
Toggle Editor |
horizon-engine/
├── engine/ # Core engine library
│ ├── core/ # Logging, memory, events
│ ├── ecs/ # Entity-Component-System registry
│ ├── rhi/ # Render Hardware Interface (Vulkan)
│ ├── renderer/ # Deferred renderer, passes, graphs
│ ├── physics/ # Jolt Physics integration
│ ├── audio/ # Audio system
│ ├── assets/ # Asset manager (Models, Textures, Shaders)
│ ├── scene/ # Scene graph and serialization
│ └── platform/ # OS abstraction (Window, Input)
├── game/ # Sample Game Application
├── assets/ # Runtime assets (Shaders, Models)
└── tests/ # Unit tests
| Library | Purpose |
|---|---|
| Vulkan | Graphics API |
| GLFW | Windowing & Input |
| GLM | Math Library |
| EnTT | ECS |
| Jolt Physics | Physics |
| spdlog | Logging |
| miniaudio | Audio |
| Dear ImGui | UI & Debugging |
| tinygltf | Model Loading |
| Catch2 | Testing |
- Core: ECS, Windowing, Input, Logging
- Physics: Jolt Integration, Character Controller
- RHI: Vulkan Backend (Device, Swapchain, Pipelines, Descriptors)
- Renderer: Deferred Pipeline, G-Buffer, PBR
- Lighting: Point/Spot/Dir Lights, Cascaded Shadow Maps
- Post-Process: Bloom, Tonemapping, TAA, SSR
- Advanced Rendering:
- GPU-Driven Rendering (Mesh Shaders, Multi-Draw)
- Ray Tracing (Shadows, Reflections)
- Volumetric Fog
- Editor:
- Gizmos
- Asset Browser
- Scene Graph Hierarchy
MIT License - see LICENSE for details.