FGE (2020)

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

Shadow-Maps

I implemented shadow maps for directional and point lights. The scene also uses HDR.

Normal-Maps

Blur

Skeletal-Animation

Foliage

Multi-Layered-Terrain with Heightmaps

The sky in the following screenshot gets rendered as a Post-Process effect and uses Rayleigh scattering and Mie scattering.

The following screenshots show a infinitley large procedual generated Voxel-World.

Particle system

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.