FEngine


FEngine is a game engine made with the Vulkan graphics API. My objective is to create a developement environnement similar to commercial Game Engines like Unity or Unreal engine. It is written entirely in C++ and uses GLFW, bullet physics and lots of other middlewares.


Vulkan
For 3D rendering, I use the vulkan graphics API. I have been able to implement simple forward phong lighting, debug lines/shapes, postprocessing, directional/point lights, UI & text rendering, model loading in gltf, textures etc.
Physics
Bullet is my goto middleware when it comes to physics. The engine support rigidbodies with sphere or box colliders. Everything is configurable from the interface.
Ecs
The backbone of the engine is the ECS. (Entity/Component/System). It means that gameplay code uses entities that are composed of many small components. Components have no behaviour, they only contain data. Systems have no state, they only read specific sets of components and mutate the data where needed. This is a very different way of programming than classic classes with inheritence, but it have worked very well so far and has led me to an architecture that is easy to code/maintain & understand when you look at it.
Network
The Engine has a custom client/server network library. It is based on UDP and has several utility layers built on top of it like packet ACK/DROP, connection handling, replication, network IDs, remote procedure calls etc. The engine was built to be 100% deterministic, this means that the clients only need to send inputs to the server. In case of desynchronisation the client can be rolled back to its true state and resimulated to match the actual client time. It was very painfull to implement, but now that it works it really improves the gameplay experience quite a lot by reducing lag to its bare minimum.

All sources are on github.
Special thanks to Vincent Calisto for introducing me to Vulkan !
Project refences : vulkan tutorial, S.Willems vulkan ressources, lunarg, glm, ImGui, Unity, GLFW


Chania