An open-source, MIT-licensed 3D game engine written in pure C# and .NET 8. The engine uses a 64-bit (double) coordinate system on the CPU and camera-relative rendering on the GPU, to achieve large world support.
Warning
The engine is still under development and is not yet feature-complete!
Important
Only the MAIN
branch is reserved for releases. All other branches might contain broken features!
The goal of this project is to provide a viable alternative to other game engines for programmers, and other people who prefer working directly with code.
Korpi Engine does NOT aim to:
- be just like Unity or Unreal Engine
- offer a visual scripting system
- be a one-size-fits-all solution for every game project
Korpi Engine DOES aim to
- stand out with its 'programmer-first' approach
- offer a clean and simple API
- adhere to the KISS principle
- be a good learning tool for game/engine development
- be modular and extensible, to allow for easy integration of new features and systems.
- Open-world games: The engine is designed to handle large worlds with minimal additional programmer effort.
- Procedural generation: The APIs have been designed to support custom procedurally generated meshes.
An example of such a game could be a Minecraft-like voxel game, or a deep-space exploration game.
- 2D games: The engine is designed for 3D games, and does not have built-in support for 2D games.
- Mobile games: The engine is designed for desktop platforms, and does not have built-in support for mobile platforms.
- Highly visual games: The engine does not have a visual scripting system, and is not designed for rapid prototyping of visual effects.
- Games that require a large/complex asset pipeline: While the current pipeline supports streaming and dynamic loading/unloading, features like asset compression have not yet been implemented.
The name "Korpi" is Finnish and means "wilderness" or "forest". It was chosen to reflect the engine's focus on large, open-world games.
Sponza example scene @ ~5ms / frame
Composite frame | Albedo |
---|---|
Normal | ObjectID |
Depth | Wireframe |
A non-exhaustive list of currently implemented engine features. Updated every once in a while.
- Runtime
- Scripting
- Unity-like C# scripting API
- Unity-like Coroutines
- Hybrid Entity/Component/System model
- Asset/Resource management
- Graphics
- Graphics-API agnostic backend
- OpenGL renderer
- DirectX renderer
- Vulcan renderer
- Camera-relative rendering
- Point, spot & directional lights
- Post-processing pipeline
- Gizmo rendering
- Custom shader language (KSL)
- Graphics-API agnostic backend
- UI
- Native Dear ImGUI support
- Physics
- Colliders
- Rigidbodies
- Audio
- OpenAL audio backend
- Networking
- LiteNetLib transport layer
- High-level networking API
- Server/Client architecture
- Other
- Input system
- Scene system
- Full 64-bit coordinate system support
- Scripting
- Editor layer
- Standalone editor
The official documentation is hosted on GitHub Pages and is automatically updated with every commit to the main
branch.
Quick links:
Check out the Getting Started guide in the documentation.
It will help you get the engine up and running on your machine, and guide you through building and running the example project.
Contributions are welcome!
- If you are new to contributing to open-source projects, please read the CONTRIBUTING.md file for more information.
- If you are a seasoned contributor, you can jump straight to the developer section of the documentation.
Portions of code or ideas are derived from the following sources:
- OpenTK for providing a managed OpenGL wrapper.
- Prowl Engine for providing inspiration and some code snippets.
- Unity for providing inspiration and a reference point for the engine's design.
- LiteNetLib for providing a high-performance C# rUDP networking library.
- 2D game framework Duality for providing a reference point for the asset pipeline.