A modern, high-performance game engine built with Vulkan
"Everything around you that you call life, was made up by people that were no smarter than you" - Steve Jobs
Blog • Discord • Documentation
2026-01-28.22-17-28.mp4
Lumina is a modern C++ game engine designed for learning and experimentation with real-world engine architecture. Built from the ground up with Vulkan, it demonstrates professional engine design patterns including reflection systems, ECS architecture, and advanced rendering techniques.
Perfect for:
- Learning modern game engine architecture
- Experimenting with Vulkan rendering techniques
- Building prototypes with a clean, modular codebase
- Understanding how engines like Unreal and Godot work under the hood
Contributions to Lumina are recognized in several ways, including Steam keys for popular games and public acknowledgment in our Discord community. Lumina improves through the work of motivated, like-minded contributors who help push the engine forward.
Caution
Lumina is an educational project in active development. APIs may change, and some features are experimental. If you encounter build issues, please reach out on Discord for assistance.
- Vulkan-powered renderer with automatic resource tracking and barrier placement
- Forward+ rendering pipeline with clustered lighting for efficient multi-light scenes
- PBR materials using a material graph compiled into GLSL.
- Entity Component System (ECS) using EnTT for high-performance gameplay code
- Reflection system for automatic serialization and editor integration
- Modular design with clean separation of concerns
- ImGui-based editor with real-time scene manipulation
- Visual hierarchy for easy entity management
- Component inspector with automatic UI generation via reflection
- Multi-threaded task system with EnkiTS
- Custom memory allocators using RPMalloc for optimal performance
- Built-in profiling with Tracy integration
- Full ECS access from Lua - Create systems, query entities, modify components
- Hot-reloadable scripts - Iterate on gameplay without recompiling
- Automatic binding generation - C++ components instantly available in Lua through reflection
- Performance profiling - Built-in Lua script profiling with Tracy
New Images Coming Soon
- Windows 10 (1803+) or Windows 11 (64-bit)
- Visual Studio 2022 with MSVC v143 toolset (17.8+)
Note
JetBrains Rider is the recommended IDE for Lumina development (not required).
-
Clone the repository
git clone https://github.com/mrdrelliot/luminaengine cd LuminaEngine -
Run setup
Setup.bat- Downloads and extracts all external dependencies, persists
LUMINA_DIR, configures git hooks, and generatesLumina.sln - No Python required — uses
curl.exeandtar.exebundled with Windows - If the download fails, manually grab External.zip and extract it into the
LuminaEngine/folder, then runGenerateProjectFiles.bat
- Downloads and extracts all external dependencies, persists
-
Open the solution
- Open
Lumina.slnin Visual Studio
- Open
-
Build and run Lumina
- Set
Luminaas the startup project - Pick
DevelopmentorDebug(Debug is far slower but enables full debugger functionality) - Two platforms are exposed:
Editor(default, includes editor tooling) andGame(runtime only, no editor) - Press F5 or Build -> Run
- Set
-
Start developing
- Open the
Sandboxproject to experiment - Or copy
Templates/Blank/to create a new project (run itsGenerateProject.batto produce a solution)
- Open the
Tip
- Missing v143 toolset? Install it via Visual Studio Installer -> Individual Components -> MSVC v143 Build Tools.
- "Cannot find .generated.h" error? Build again — Visual Studio sometimes needs a second pass to pick up generated files.
- C1076 compiler limit reached? Retry the build; this is a known intermittent issue with a font file.
- "Application control policy blocked this file"? Disable Windows 11 Smart App Control.
- Build fails? Submit an issue or reach out on Discord.
Note
Setup.bat persists LUMINA_DIR automatically (via setx). If you need to set it manually:
setx LUMINA_DIR "C:\path\to\lumina"Caution
After pulling or merging, delete Binaries/ and Intermediates/ and run GenerateProjectFiles.bat to regenerate the solution.
- GLTF
- FBX
- GLB
- OBJ
- PNG
- JPG
- basis_universal - GPU texture compression supporting transcoding to BC7/ETC/ASTC at runtime
- ConcurrentQueue - Industrial-strength lock-free queue supporting multiple producers and consumers
- EASTL - Electronic Arts Standard Template Library optimized for game development with custom allocators
- EnkiTS - Lightweight task scheduler for parallel-for, task sets, and dependency graphs across threads
- EnTT - Fast entity component system with sparse-set storage and signal/delegate support
- FastGLTF - High-performance GLTF 2.0 parser with complete specification support
- GLFW - Multi-platform window and input library for OpenGL, OpenGL ES, and Vulkan
- GLM - Header-only C++ mathematics library with GLSL-compatible syntax
- GoogleTest - C++ testing framework providing assertions, fixtures, and test discovery
- ImGui - Immediate-mode GUI for rapid tool development with minimal dependencies
- JoltPhysics - High-performance multi-threaded physics engine with continuous collision detection
- Luau - Efficient, optionally-typed scripting language derived from Lua
- MeshOptimizer - Mesh optimization for vertex cache, overdraw, and vertex/index buffer compression
- Miniaudio - Single-file audio playback and capture library
- Nlohmann JSON - Modern JSON library with intuitive syntax and STL compatibility
- NVIDIA Aftermath - GPU crash debugging and post-mortem dump analysis
- OpenFBX - Lightweight FBX loader for geometry, skeletons, and animation (no Autodesk SDK)
- RenderDoc - Graphics debugger integration for frame capture and analysis
- RPMalloc - Lock-free thread-caching memory allocator
- Slang - Modern shader language and compiler with SPIR-V / HLSL output
- SPDLog - Fast C++ logging library with async mode and multiple sinks
- SPIRV-Reflect - Runtime reflection for SPIR-V shader binaries
- stb_image - Single-header image loading library for common formats
- TinyObjLoader - Lightweight OBJ parser with MTL material support
- Tracy - Real-time frame profiler with sampling, GPU zones, and lock contention tracking
- vk-bootstrap - Vulkan initialization helper that reduces boilerplate
- Volk - Vulkan meta-loader for runtime function loading
- Vulkan - Low-level graphics API providing explicit GPU control
- VulkanMemoryAllocator - Memory management library for Vulkan with defragmentation
- xxHash - Extremely fast non-cryptographic hash algorithm
Lumina follows a consistent naming convention:
| Prefix | Usage | Example |
|---|---|---|
F |
Internal engine types (non-reflected) | FRenderer, FTexture |
C |
Reflected classes | CTransform, CMeshRenderer |
S |
Reflected structs | SVertex, SMaterial |
General Rules:
- PascalCase for all identifiers
- Tabs for indentation
- Braces on new lines
- Descriptive variable names
See CONTRIBUTING.md for complete guidelines.
Contributions are welcome! Whether it's bug fixes, features, or documentation improvements.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes following the coding standards
- Add tests if applicable
- Commit with clear messages (
git commit -m 'Add amazing feature') - Push to your branch (
git push origin feature/amazing-feature) - Open a Pull Request
Requirements:
- Clean, well-documented code
- Follow existing architecture patterns
- Include tests where appropriate
- Update documentation as needed
Lumina is inspired by and learns from these excellent open-source engines:
- Spartan Engine - Feature-rich Vulkan engine
- Kohi Game Engine - Educational engine series
- Lumix Game Engine - Fully working indie engine.
- ezEngine - Professional open-source engine
- GoDot - AAA quality open source C++ game engine.
- Unreal Engine - Does it need an introduction?
Special thanks to the entire game engine development community for sharing knowledge and resources.
Lumina is licensed under the Apache 2.0 License.
Copyright 2024 Dr. Elliot
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
- Blog: dr-elliot.com
- Discord: Join our community
- GitHub: mrdrelliot/lumina
Made with ❤️ for the game development community
⭐ Star this repo if you find it useful!






