- Rust 100%
| src | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| Cargo.toml | ||
| LICENSE | ||
| README.md | ||
deep-engine
Goal
This engine is as much as a way of learning as a project aiming production. The engine target anyone, whatever their ressources. Therefore, we should support most of the standard open source software (i.e. Blender).
Also, the documentation is a great deal in this project.
We can resume goals as:
- Documentation: why, how we do things and how to use it
- Learning: Vulkan, ECS, Rust, etc...
- Aiming production by small step: we should target usability early to propose the engine and gather feedbacks, even if the engine is crap
- Allow any person to use it, whatever their ressources (#blender)
In the scope of this engine:
- Manage scene
- Render scene
- Propose an interface to make easy system
- Popose an interface to make prefab
- Propose an interface to create component.
Design
The start of all reflexion could relie on the graphic in "Game engine architecture" presented below.

The chosen design is ECS.
- Entity: unique IDs
- Components: data describing entitu
- System: where logic lies.
Technologies
Language
I have chose Rust as programming language. Here some arguments:
- It's low level.
- Testing is integrated into the compilator.
- It has a modern syntax.
- I really love it.
- The documentation AND the community are great, therefor, help is easy to find.
ECS engine
As create an ECS engine could be really tricky and out of scope, at least for now, we should use SPECS. It provide a solid way of making ECS while being well documented.
Graphic engine
Vulkan seems to be a good choice.
- Vulkan is explicit, where openGL is implicit.
- Many game engine already support it: UE4, CryEngine, IDTech 5, etc.
- Many game support it: Doom, Serious Sam, F1 2017 (god damn, look at this one, it's beautiful).
- The specifications are open source.
- It's freaking 2017, use the today tech! All new and shiny (arguable).
- As mention by more experience developpers on #rust-gamedev, it may be rough on the edges and may be hard to use
As it's Rust implementation, we shall use Vulkano.
Resources Loader
Mathematics
Games and game engines relies heavily on linear algebra. Therefore, we should use or create a library to easily manipulate that. Here are some of the existing library in Rust:
Physics
UI
Scripting
Litterature
- Game engine Architecture
- Real Time Rendering third edition
- Development & Deployment of Multiplayer Online Games
- Clean Code
Rust
ECS
- Wikipedia page on ECS
- Excellent article by Adam Martin about ECS
- The ECS wiki
- Evolve Your Hierarchy By Mick West
- A Data Driven Game Object System, Scott Bilas
- Entity-Component game programming using JRuby and libGDX - part 1
- SPECS
Graphic
Contributors
- Mathieu Nivoliez