🗓️

Current

Harmony

A cross-platform game engine written in C++ using Vulkan and SDL, inspired by the workflow of Unreal Engine.

Harmony is my game engine, I really enjoy Unreal Engine's workflow of defining classes and implementing functions in C++, and then being able to create blueprint prefabs of them or just expose functions to blueprints, and in the end I want the workflow of my engine to resemble that. With that in mind, all game scripting in my game engine is done using C++, and I created a custom data reflection system (link to blog on my reflection system) similar to Unreal's Header Tool, that parses all game and engine headers for macro's like HVARIABLE, HENUM, etc and generates code in the game .dll that the editor can use to gather information on game types.

I was also easily build off of this system to create my serialization system that allows for scene saving and the saving of entity prefabs to disk. I have plans of adding a visual scripting system later that utilizes this system.

Harmony isn't written with any platform specific API's, this allows native Linux and Windows builds because Vulkan is used as the graphics API. The renderer is written using modern Vulkan extensions, like Bindless Descriptors, Dynamic Rendering, Timeline Semaphores, and Buffer Device Address. These extensions greatly simplify Vulkan from a development standpoint and remove most of the common complaints around Vulkan's verbosity (I love BDA in particular, it allows passing around addresses to buffers stored on the GPU and you can simply use C Style casts from within shaders).

Harmony's renderer is also utilizing modern GPU features, like mesh shaders, ray tracing, variable rate shading, and the renderer is fully GPU driven by my custom render graph.

I am using meshopt to create meshlets when assets are loaded into the engine. This allows for more granular culling of meshes, greatly improving performance in scenes with lots of geometry. Along with GPU driven rendering, the renderer has a nearly fixed time of around 1ms on the CPU during the typical frame loop, regardless of the scene complexity.

Harmony features adaptive ray traced shadows, based on ray tracing gems chapter 13. This allows for realistic soft penumbra shadows, and nice looking contact shadows similar to ambient occlusion.

(This video is from a very old version of the engine)

Harmony also implements Jolt Physics by Guerilla Games. It is still a very basic implementation, but I have plans on expanding it and actually creating a small project in my engine once I am finished with ray traced global illumination.

Harmony also implements Tracy Profiler, supporting both CPU and GPU side frame profiling.