A small render engine developed with Vulkan in modern C++.
- Physically Based Rendering (PBR) - Realistic lighting and materials
- GLTF & OBJ Loading - Loading of custom 3D models
- Immediate Mode Editor UI - Editor tools using Dear ImGui and ImGuizmo
- Entity Component System (ECS) - Efficient object management using EnTT
- Framegraph - Multipass rendering with automatic renderpass sorting
- Deferred Rendering - Improved lighting performance
- HDR Rendering and Tone Mapping - Enables wider color range for more visible details
- Physically Based Bloom - Realistic glow effect around bright areas created using convolution
- Screen Space Ambient Occlusion (SSAO) - Enhanced depth perception
- Mesh Shaders Pipeline - Modern geometry rendering
- GPU Driven Rendering - Minimize CPU rendering overhead
Before building ensure you have the following installed:
- Vulkan SDK - Download an install the latest version (at least version 1.3).
- CMake - Used for building the project. Either install it manually or use an IDE with built-in CMake support (Visual Studio is the recommended choice)
Follow these steps to get started:
-
Clone the repository and its submodules:
git clone --recurse-submodules https://github.com/chFleschutz/aegix-engine.git
-
Open the folder in a CMake supported IDE (e.g. Visual Studio) or generate project files for your preferred platform using CMake.
-
Build and run the project to view an example scene.
This project is structured into several independent modules:
- aegix-assets - Collection of sample assest
- aegix-gltf - GLTF 3D model loader
- aegix-log - Logging library
The engine relies on the following external libraries:
- entt - Entity component system (ECS)
- glfw - Window management
- glm - Math library
- imgui - Immediate mode UI
- imguizmo - Gizmos
- meshoptimizer - Generating meshlets
- stb - Image loading
- tinyobjloader - OBJ 3D model loader
- Vulkan - Graphics API
- Vulkan Memory Allocator - Vulkan Memory Management
- Volk - Vulkan Function loader

