5 years into development of my custom game engine
10.2.2026
This article has been long overdue.
As with the the previous article on this subject, this post is a bit beyond 5 years of
development. This should be considered a continuation of that article, so read it first if you haven't already.
As a reminder, Kohi's repo was officially created on 2.28.2021.
I work on this project less than part-time hours every week, usually maxxing out at about 10-15 hours at most.
To date, if I were to take all the collective time I have spent over the course of this project, it's probably somewhere
close to around 15 months or so of full-time development. If I were to factor
out the experimental bits of code, we're probably looking at more like a year flat. The progress made in
that time, in my opinion, is quite substantial.
Since the last article, there has been a large architectural transition from
the older Kohi resource/rendering architecture toward a more modular engine, with the biggest areas of development being
asset/resource management, Vulkan rendering, materials/shaders, animation/model support, terrain/editor tooling,
cross-platform infrastructure, and C-level portability/performance.
Here is a brief list detailing the highlights of the work done thus far:
- Major engine/repository reorganization: Reworked the project structure, libraries, executables, plugins, application configuration, Vulkan renderer, render graph, and Standard UI architecture. The Vulkan renderer also moved toward dynamic rendering and a node-based render graph.
- KPackage/VFS system: Introduced the KPackage format, asset manifests, on-disk file pointers, and a virtual filesystem, establishing the foundation for the later asset pipeline.
- Water and terrain groundwork: Added a water-plane feature and continued groundwork for heightmap-based terrain assets.
- Asset/resource system overhaul: Built a new asset system with handlers, importers, binary serializers, scene/font/texture/static-mesh resources, KNames, dynamic arrays, and a redesigned resource architecture.
- Texture and font pipeline: Reworked textures into the new resource/asset system and updated bitmap/system font loading and rendering accordingly.
- Material system redesign: Substantially reworked materials, material resources, shader loading, default materials, descriptors, and shader update behavior.
- Actor: Experimented with an Actor concept, which ultimately didn't work out and was removed.
- Scene and geometry work: Reworked geometry/static-mesh resources, and made numerous renderer and scene-related fixes.
- Vulkan renderer modernization: Converted renderer resources toward handles, reworked descriptor/shader systems, improved synchronization and image transitions, added dynamic Vulkan loading across platforms, and eliminated numerous validation issues.
- Audio system redux: Rebuilt the audio system around the renderer's frontend/backend architecture, added scene audio emitters, distance-based activation, categories, and associated debugging functionality.
- Test projects: Added an initial game project, camera switching/keybinds, experimented with racing vehicle movement and track collision.
- Asset pipeline redux: Rebuilt the asset/import pipeline again in 2025, including bitmap/system fonts, textures, static meshes, importers, serializers, shader integration, and hot reloading; the old resource system was subsequently removed.
- Rendering architecture cleanup: Removed the older viewport/render-graph implementation, revamped the camera system, and simplified renderer-facing resource handles into strongly typed IDs.
- New material renderer: Began a dedicated material renderer, optimized shaders for it, fixed normals/material/renderer issues, and added storage buffers and a major descriptor/binding-set/SSBO refactor.
- Animation and model pipeline: Added a skinned-mesh/animation system, integrated Assimp importing, introduced the K3D model format and loader, completed the animation system, and eventually consolidated it into the model system while removing the old static-mesh/OBJ pipeline.
- UI improvements: Major UI refactoring produced Kohi UI (KUI), with new controls, scrolling, focus/textbox behavior, clipping, mouse interaction, checkboxes/imageboxes, and numerous memory fixes.
- Editor, gizmos, and interaction: Scaffolded editor. Reworked editor gizmos, transform handling, picking/raycasting, BVH support, and object-selection functionality.
- Heightfield terrain system: Added heightfield terrain rendering, elevation editing, terrain serialization/load/save, raycasting, chunk editing, terrain materials/textures, editor tooling, and terrain events.
- Cross-platform support: Continued substantial Linux, Windows, and macOS work, including build systems, dynamic library/Vulkan loading, file dialogs, hardware detection, input/key-repeat behavior, clipboard support, and platform-specific fixes.
- Build/dependency simplification: Reworked the build system so components can be built independently, reduced command-line dependencies, improved Fedora/Linux/macOS/Windows setup, and progressively eliminated libc dependencies.
- Memory/debugging/performance: Large ongoing effort to eliminate memory leaks and invalid accesses, add GPU/render timestamps and profiling, optimize synchronization/barriers, and improve rendering performance.
- Low-level C/platform cleanup: Converted the codebase to C99, cleaned up allocation/string APIs, added custom utility/math functionality, improved portability, updated syscall/platform code, and added assorted type-safety improvements such as changing KNULL to ((void*)0).
- Latest renderer/engine work: Added renderer blitting and heightfield-terrain events, renderer timestamp metrics/GPU profiling, further material-system decoupling, a u32 BST, flow-control work, and additional platform/syscall/build fixes.
This is by no means an exhaustive list. You can see a list of filtered commits here, including the lastest
in-progress version branch here. Note that the TODO.md and CHANGELOG.md files in the repo also list a lot of these changes.
Shadows of Illumina
Shadows of Illumina will be the first game made and released with Kohi. It was initially conceptualized on February 12, 2025,
and named the week after on February 19, 2025. Much of the original concepts, lore, mechanics, etc. were designed on-stream here:
Long story short, it's an "isometrically-perspectived" 3D action RPG, but with a few major twists, specifically concepts that
were developed after.
For reasons detailed in the game's lore, it will feature several rendering modes, all taken from the perspective of a drone
following the player around the world. The player's perspective is that of the drone, which can be changed along the way. The
four modes are:
- Lo 2D: The first render mode available in the game. It will feature top-down, 8-bit style 2D graphics. (think Nintendo NES-era graphics)
- Hi 2D: The second render mode available in the game. It will feature top-down, 16-bit style 2D graphics with richer environmental detail. (think Nintendo SNES-era graphics)
- Lo 3D: The third render mode available in the game. It will feature fixed-angle, but 3D, 16-bit style graphics with limited environmental detail. (think Playstation/PS1-era graphics)
- Hi 3D: The fourth and final render mode available in the game. It will feature fully adjustable 3D, full-colour style graphics with richer environmental detail. (think Playstation 2/3+ era graphics) This is incidentally using Kohi's default PBR renderer.
Renderer mode will be switchable via equipment at almost point in the game, except for during combat or cutscene sequences, or any other
scenario where gear can't normally be changed.
Additional information may be found over at the Shadows of Illumina Website.
The way forward
From here, only features required by Shadows of Illumina will be added to the engine until it's release. This doesn't count for bugfixes and
quality-of-life improvements, though - those will still be added along the way.
Make sure to keep up with the project by checking out the live stream. Hope to see you there!
Some links: