Hellheim Engine

Custom-made game engine built in C++ and OpenGL . My work on the engine was varied as I worked on differnet topics: I worked on shaders , the engine's timer timer and the implementation of the animation system .
This project was made as part of a Master's degree Final Project by Rolling Barrel Studio , a team of 19 programmers which I was a part of, and used to make the Chrysalis game.

During this project I built upon my knowledge in C++ and honed my problem-solving skills for tackling complex challenges, while also developing my ability to work and organize effectively in a large team.
Hellheim Engine's UI
Hellheim Engine's UI

Set up

The initial set up of the engine was made individually, using OpenGL and the graphical user interface Dear ImGui . With this version of the engine basic camera movement was programmed and it was possible to load 3D models (GLTF files) . Here you can find this first version in a GitHub repository.

SHADERed's UI
SHADERed's UI example

Shaders

Developed the first version of physically based rendering shaders in the engine using the Phong BRDF (Bidirectional Reflectance Distribution Function) model. For this task I used the software SHADERed to edit the vertex and pixel shaders and have a more visual way of debugging.

Timers and framerate

Created the timer system in the engine. Implemented functions to calculate and use the delta time. Also integrated the option to limit the framerate and prevent screen tearing using Vsync .

Used ImGui to create a debugging screen for the Engine timer.

timer
Engine's timer debugging screen
Skinning implemented in an example model

Animations

Worked on importing the animation data from GLTF files into the engine (timestamps, transforms, nodes, joints...).

Implemented the animation movement using timers (also being able to modify the animation speed) and by passing the data to the shaders to apply the skinning (deforming the mesh according to bone transformation) of the model.

Also created the animation component and its interface in the inspector, where the states can be set up, the speed can be modified and the animation can be paused/played/restarted.

And finally integrated blending between animation states, controlling the duration of the transitions.

Blending between diferent animation states

Check out the Hellheim Engine in this repository