Mikoto is an open-source, Vulkan-based game engine written in modern C++. Developed as an educational project, the engine aims to provide hands-on learning experiences in graphics programming while helping me explore the capabilities of the Vulkan API.
Feature Name | Feature Description | Supported |
---|---|---|
Model Loading | Ability to load 3D models from various file types | ✅ |
Image Loading | Support for loading and using textures/images | ✅ |
Blinn-Phong Lighting | Basic lighting model implementation | ✅ |
Entity Component System | Management of scene game objects through ECS | ✅ |
Game Object Serialization | Save and load objects to/from disk | |
Particle System | Visual particle effects like smoke, fire, etc. | ❌ |
Vulkan Ray Tracing | Support for Vulkan RayTracing | ❌ |
Physics Integration | Basic collision detection and response | ❌ |
UI Integration (ImGui) | Immediate mode GUI for runtime/editor UI | ✅ |
Animation System | Skeletal animation and keyframe interpolation | ❌ |
Audio Support | Load and play sound effects and background music | ❌ |
Platform | Status |
---|---|
Linux | Supported |
Windows | Work-in-Progress (WIP) |
- CMake 3.18 or higher.
- The Vulkan SDK: Available from Vulkan.
- C++20 Compiler: Tested with GCC 12.3.0.
- GLSL-C: Optional, as precompiled shader binaries are included.
Resources/
: Extra utilities like screenshots, some models to play around with, etc.Mikoto-Engine/
: The core engine that powers the Mikoto Game Engine.Mikoto-Editor/
: The editor project for creating and managing game scenes.Mikoto-Runtime/
: A sample project that demonstrates the engine's features.
Follow the steps below to build Mikoto Engine. Currently, the building process has been tested on Linux and Windows.
-
Clone the repository:
git clone --recursive https://github.com/kateBea/Mikoto.git
-
Navigate to the project directory:
cd Mikoto
-
Create a build directory:
mkdir build && cd build
-
Run CMake:
cmake -S .. -B .
-
Build the project:
cmake --build . --config Release
-
Run the executable:
./Mikoto-Editor/Mikoto-Editor
For Visual Studio users, CMake will generate .sln
files by default. Simply open the solution in Visual Studio and build from there. CLion users can open the project directly and build it without extra steps.
The development of Mikoto Engine is made possible thanks to these fantastic third-party libraries:
Library | Description | Link |
---|---|---|
FMT | Modern C++ formatting library | fmtlib/fmt |
GLEW | OpenGL Extension Wrangler Library | GLEW |
GLFW | Multi-platform library for window management | glfw/glfw |
GLM | OpenGL Mathematics library | g-truc/glm |
ImGui | Immediate Mode GUI library | ocornut/imgui |
Spdlog | Fast C++ logging library | gabime/spdlog |
EnTT | Fast and efficient Entity-Component System | skypjack/entt |
Volk | Meta-loader for Vulkan API | zeux/volk |
Assimp | Asset importer library | assimp/assimp |
VulkanMemoryAllocator | Memory allocation for Vulkan resources | GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator |
ImGuizmo | Gizmo manipulator for ImGui | CedricGuillemet/ImGuizmo |
yaml-cpp | YAML parser and emitter for C++ | jbeder/yaml-cpp |
nativefiledialog-extended | File dialog library for native UIs | btzy/nativefiledialog-extended |
JoltPhysics | Physics engine library | jrouwe/JoltPhysics |
tomlplusplus | TOML configuration file parser for C++ | marzer/tomlplusplus |
Note: The required libraries are included as a submodules in the project and do not require separate installation, just need to clone the repository with
--recursive
flag.
The primary goal of Mikoto Engine is to serve as a learning platform for exploring modern graphics programming techniques. Features are implemented progressively as new concepts and ideas are explored.
The development of Mikoto has been inspired by the work of the following:
- Joey De Vries for the incredible LearnOpenGL tutorials.
- Yan Chernikov for his insightful YouTube videos.
- Cem Yuksel for his educational graphics programming videos.
- Jason Gregory for the book Game Engine Architecture.
- Matt Pharr, Wenzel Jakob, Greg Humphreys for Physically Based Rendering: From Theory to Implementation.
- Sascha Willems for the Vulkan examples repository.
Mikoto Engine is still in its early stages, and additional features and optimizations will be added over time. Feedback is always welcome!
This project is licensed under the Apache License 2.0.
You are free to use, modify, and distribute this software under the terms of the Apache License 2.0. A copy of the license is included in the repository.
For the full license text, see the LICENSE file in the repository.