Skip to content

JamesLiu12/Ignis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

645 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Ignis Game Engine

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.

πŸ”₯ About

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.

🎯 Project Goals

  • 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

πŸ—οΈ Architecture

Core Engine (Ignis)

  • 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

Editor Application

  • 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

πŸ› οΈ Technology Stack

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

πŸš€ Getting Started

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)

Prerequisites

  • 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

Building on Windows

# 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.exe

Note: The build process automatically compiles:

  • Editor - The main editor application
  • Runtime - Standalone game runtime executable
  • Script Module - Project-specific game code (DLL)

Building on macOS

# 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/Editor

Note: The build process automatically compiles:

  • Editor - The main editor application
  • Runtime - Standalone game runtime executable
  • Script Module - Project-specific game code (dylib)

πŸ“ Project Structure

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

πŸ—“οΈ Development Timeline

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

πŸ‘₯ Team

  • Chai Ming How (3036086476) - BEng(CompSc)
  • Liu Sizhe (3036098041) - BEng(CompSc)

Supervisor: Oliveira Bruno

πŸ“„ License

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.

🀝 Contributing

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.

πŸ“š Learning Resources

This project is inspired by and learns from:

About

Ignis Engine

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages