FGE is a game engine that I develop. The goal is to create a general-purpose 3D game engine that can be used for all types of games and Real-Time 3D applications (similar to UnrealEngine, CryEngine, or Unity).
The engine is written in
C++17 and OpenGL
is used for 3D rendering. I implemented various features:
- A scene can be organized with Actors and Components. The approach is similar to the approach of UnrealEngine.
- Runtime-Type-Reflection of Actors and Components with the help of RTTR. The reflection data is used for serialization and the property panel in the editor.
- Serialization and deserializing of scenes into JSON files with the help of RapidJSON.
- Configuration of the engine through Lua scripts.
- A Material-System that allows custom shaders.
- A Physic-System through Bullet.
- Dear ImGui integration for the editor and debug GUIs.
- Scripting of the engine through Lua with the help of sol2.
- Custom asynchronous logging system.
- Event System.
I learned and still learn a lot from this project. For example, I learned how important it is to properly use the cache when trying to write performant programs. Also, I learned how bad (in terms of performance) virtual functions can be.
In the following, I will showcase some visual effects, which I implemented with the help of the engine.
Physical-Based-Rendering with Image-Based-Lightning
I implemented shadow maps for directional and point lights. The scene also uses HDR.
Multi-Layered-Terrain with Heightmaps
The following screenshots show a infinitley large procedual generated Voxel-World.
The particle system uses transform feedback for calculating the particle positions.
Part of the source code can be found on GitHub. At the moment I rewrite a lot of the engine since I learned a lot of new things and want to properly implement them.