hop-engine is one of my ongoing projects, where i've been building a cross-platform graphics engine using Vulkan. the end goal i've set myself is a reasonably fully featured graphics/game engine, which doubles as a tool capable of procedural geometry and texture generation. in particular i'm interested in non-destructive workflows, and automatable workflows. i want to be able to also use it as a batch image processing tool!
essentially, hop-engine is my big everything-project for graphics. my end goal is a graphical editor with node-based editing workflows for as much as possible (whether it makes sense or not!)
in particular, hop-engine has taught me a ton about the Vulkan API (and how to effectively wrap its low-level interfaces into user-friendly frontend resources), and has given some key lessons in thoughtful API design and architecture.
in order to showcase hop-engine at the Staffs Uni GradEx show recently (June 2026) i built the demo above, entirely using hop-engine. it features stylised post-processing, 3D modelling and texturing courtesy of me, and shows off a little bit of the UI library i've been working on within hop-engine.
the background images are provided by NASA, and are credited in the bottom right! the application can run on loop forever, and a new background is selected randomly each iteration. i do love my space themes and i do love my retro themes, so it's a logical combo.
there's lots of stuff in the works, but here's a reasonably complete feature summary:
- render graph - a richly featured multi-pass rendering interface allowing multiple render passes (with customisable output buffers) to be chained together, including multiple cameras and resolutions for highly customisable post-processing workflow
- robust hierarchical scene system - behaves similar to Unity, where entities/objects can have components/behaviours attached to add functionality
- solid model support via OBJ, and texture support via PNG, BMP, and JPG
- resource-packaging system - allowing easy distribution and deferred loading of application resources (compression to-be-implemented)
- engine-application model - the end developer provides a subclass of the Application base class, which provides an update method and a place to store variables sensibly
- efficient rendering via draw call ordering - including a priority system to allow control of what order materials and objects render in
- custom reference counted pointer classes - both strong and weak shared pointers, with rich operator support, which the engine can track internally for memory analysis
- custom material, font, and render graph descriptor files using a custom deserialisation format with advanced parsing tools - easily extensible for additional custom resource types
- semi-custom shader format based on GLSL - with automatic insertion of engine uniform variables, making shader development easy
- GTAO implementation - from-scratch GLSL implementation of the paper by Jimenez, Wu, Pesce, and Jarabo, available here (in need of further optimisation)
- cross-platform - tested continuously on Linux and Windows (often with the help of friends; thankyou Lucy in particular for helping me identify all the driver-specific quirks of Vulkan!)
- (incomplete) UI rendering and building toolkit - using a versatile shader and efficient use of geometry and draw calls to minimise rendering cost
i also learned a TON about build systems (i taught myself CMake), pixel-painted a font or two, developed my knowledge of rendering techniques and shader tricks, and generally got a lot more fluent in C++ (especially with modern paradigms)