A C++-based 3D game engine developed as a Final Year Project at The University of Hong Kong, by Chai Ming How and Liu Sizhe.
Ignis (Latin for "fire") is a custom game engine built from scratch to understand the fundamental concepts behind modern game development. This project focuses on learning core engine architecture, graphics programming, and real-time systems design.
- Develop a functional 3D game engine capable of producing games
- Gain hands-on experience with graphics programming and engine architecture
- Implement modern C++ design patterns and performance optimization techniques
- Create a foundation for future game development projects
- Application Layer - Generic application lifecycle and event management
- Window System - Cross-platform window and input handling (GLFW)
- Renderer - OpenGL-based graphics pipeline with API abstraction
- Entity Component System (ECS) - Flexible game object management
- Physics - Integration with Bullet Physics
- Audio - 3D positional audio system (miniaudio)
- Asset Pipeline - Model and texture loading (Assimp)
- Virtual File System - Asset path resolution and management
- Scene Editor - Visual scene creation and manipulation
- Property Inspector - Real-time component editing
- Debug Panels - Physics debugging, performance stats, console
- Asset Browser - Model and texture management
- PBR Material Editor - Real-time material editing with preview
| Component | Technology |
|---|---|
| Graphics API | OpenGL |
| Window Management | GLFW |
| Physics | Bullet Physics |
| Audio | miniaudio |
| Math Library | GLM |
| Asset Loading | Assimp |
| GUI | Dear ImGui |
| Build System | CMake |
| Logging | spdlog |
A sample game project can be found at https://github.com/JamesLiu12/Ignis-Example-Project
We encourage you to build you own editor and game, but you can also try our pre-built editor in release
Known limitation for download and use prebuilt editor / game on macOS: the system will forbid the opening of the executable and .dylib files for security reasons, so you need to manually approve each of them, which takes some times (so we encourage you to build one by your self)
- CMake 3.20 or higher
- C++20 compatible compiler
- Windows: Visual Studio 2022 or later (with C++ desktop development workload)
- macOS: Xcode Command Line Tools
- Ninja build system
- Windows: Visual Studio 2022 has Ninja by default, or install via Visual Studio installer
- macOS:
brew install ninja
- Git for version control installed and in path
- Homebrew for macOS only
# Clone the repository
git clone https://github.com/your-username/Ignis.git
cd Ignis
# Configure with preset
cmake --preset x64-debug
or
cmake --preset x64-release
# Build using preset (builds Editor, Runtime, and script module)
cmake --build --preset x64-debug
or
cmake --build --preset x64-release
# Run the editor
out\build\x64-debug\bin\Editor.exe
or
out\build\x64-release\bin\Editor.exeNote: The build process automatically compiles:
- Editor - The main editor application
- Runtime - Standalone game runtime executable
- Script Module - Project-specific game code (DLL)
# Install dependencies
brew install cmake ninja
# Clone and build
git clone https://github.com/your-username/Ignis.git
cd Ignis
# Configure with preset
cmake --preset arm64-debug
or
cmake --preset arm64-release
# Build using preset (builds Editor, Runtime, and script module)
cmake --build --preset arm64-debug
or
cmake --build --preset arm64-release
# Run the editor
out/build/arm64-debug/bin/Editor
or
out/build/arm64-release/bin/EditorNote: The build process automatically compiles:
- Editor - The main editor application
- Runtime - Standalone game runtime executable
- Script Module - Project-specific game code (dylib)
Ignis/
βββ Ignis/ # Core engine library (shared DLL)
β βββ src/
β βββ Ignis/
β β βββ Core/ # Application, events, entry point, logging, file system
β β βββ Renderer/ # Graphics pipeline, PBR rendering, shaders
β β βββ Scene/ # ECS, entities, components, serialization
β β βββ Physics/ # Bullet Physics integration
β β βββ Audio/ # 3D audio system (miniaudio)
β β βββ Asset/ # VFS, asset loading, importers
β β βββ Project/ # Project management, script module loading
β β βββ Script/ # Scripting system, native script interface
β β βββ UI/ # UI system, text rendering
β β βββ Platform/ # Platform-specific implementations (Windows, macOS)
β β βββ ImGui/ # ImGui integration layer
β βββ Ignis.h # Main engine header
β βββ pch.h # Precompiled headers
βββ Editor/ # Editor application
β βββ src/
β β βββ Editor/
β β β βββ EditorApp.h/cpp # Main editor application
β β β βββ EditorLayer.h/cpp # Editor UI, project management, export
β β β βββ EditorSceneLayer.h/cpp # Scene editing, play mode
β β β βββ PanelManager.h/cpp # Panel management system
β β β βββ Panels/ # Editor panels
β β β β βββ AssetBrowserPanel # Asset management
β β β β βββ PropertiesPanel # Component inspector
β β β β βββ SceneHierarchyPanel # Entity tree view
β β β β βββ EditorConsolePanel # Debug console
β β β β βββ EngineStatsPanel # Performance metrics
β β β β βββ PhysicsDebugPanel # Physics visualization
β β β β βββ MaterialEditorPanel # PBR material editor
β β β βββ Core/ # Editor utilities
β β βββ pch.h
β βββ resources/ # Editor resources (shaders, fonts, icons)
βββ Runtime/ # Standalone runtime executable
β βββ src/
β βββ RuntimeApp.h/cpp # Runtime application
β βββ RuntimeSceneLayer.h/cpp # Game scene layer
βββ CMakeLists.txt # Root build configuration
βββ CMakePresets.json # CMake presets for different platforms
βββ README.md
| Phase | Duration | Focus |
|---|---|---|
| Phase 1 | Sep-Oct 2025 | Foundation, Core Systems |
| Phase 2 | Nov-Dec 2025 | Rendering System |
| Phase 3 | Jan-Feb 2026 | ECS, Asset Pipeline |
| Phase 4 | Mar 2026 | Audio, tools, runtime |
| Phase 5 | Apr 2026 | Game Development & Finalization |
- Chai Ming How (3036086476) - BEng(CompSc)
- Liu Sizhe (3036098041) - BEng(CompSc)
Supervisor: Oliveira Bruno
This project is licensed under the Apache License 2.0 - see the LICENSE.txt file for details.
Third-party libraries used in this project have their own licenses - see THIRD_PARTY_LICENSES.md for details.
This is an academic project developed as part of our Final Year Project. While we appreciate interest, we are not accepting external contributions at this time.
This project is inspired by and learns from: