DuskEngine Devlog 0 - Quick Overview
DuskEngine is a game engine that I'm writing for myself. I started development on it about three years ago. I am also currently designing a game that will use it, but I try to have a more generic approach wherever possible; at the end of the day I wouldn't mind using this engine for more than one game.
I post about it a lot on my bsky so head on there to see more videos and screenshots and such.

Technical details
I use C++ and the bulk of development happens on Windows. The renderer there uses OpenGL. MacOS is also supported (I ensure the project builds and runs on a weekly basis), but the Metal renderer is very far behind in terms of features (due to a lack of time on my part). But it does have raytraced shadows, so there's that 😝
The engine compiled and ran on Linux a few months ago but unlike MacOS, I don't make Linux builds regularly, but would like to change this eventually.
I normally think of DuskEngine as "the editor" together with "the engine". The editor, when you make a build that includes it, kinda sits on top of the engine and represents all the editor tools that you use to make your game. The engine is the thing you turn on which then does its thing.
The editor uses Dear ImGui for the interface.
Both the editor and the engine (i.e. play mode) use Lua for scripting purposes. I use LuaJIT and sol2.
You can even write entire editor windows in Lua, as can be seen here.
Whirlwind tour of some of the other larger deps:
I use Jolt for physics.
And SoLoud for audio.
Assimp for mesh loading.
Cereal for binary serialization. There is an asset import (and reimport) functionality, which takes the raw asset files (such as .pngs, or .gltf) and turns them into engine-specific data. Cereal is used to serialize and deserialize this data.
SDL2 for windowing and input.
GLM for math.
boost for json parsing and writing, uuid generation and others.
Tracy for profiling.
ImGuizmo for the editor gizmos.
BTW, unlike the editor UIs which use ImGui, the gameplay UIs use a custom implementation. Gameplay UIs are assets and there's an editor for them too:

There is a lot of work left to do for the UI side of things, besides the layout, the renderer also needs improvements.
It is somewhat similar to the one in Unity, using pivot points, anchoring, margins and so on.
Unlike Unity, the UIs are not objects in the scene. You can have as many UIs as you want, even if they're not rendered by a camera (you might render them to textures). The scripts that manage those UIs choose when and how they update.
I will likely refer to Unity again in future articles, because it's the engine I have the most experience with (I've been using it for about 10 years at the time of starting work on DuskEngine, I don't really use it anymore), so my idea of what an engine should be like is at least in some amount, inspired by it.
For a fun UI system example, see this mobile phone UI which gets rendered to a texture that then gets applied to the phone screen. The mobile phone controller script uses raycasting from the mouse cursor position, by converting the ray hit point from the phone screen's collider's coordinates into UI (essentially UV) coordinates. Finally, it triggers an update with the generated inputs to simulate the touchscreen.
What I'm actively working on right now
I want to implement some fancier NPC behaviors and so I've added navmesh support via the Recast library. I'm currently making it work all the way from the asset side to gameplay scripting.
Tech goals and questions for the near(ish) future
Occlusion culling needs implementing. Especially important as I've started adding more and more buildings to the scenes.
More renderer features with better visuals are needed.
I really need to set up some kind of build system, I use a Visual Studio solution and an Xcode project for Windows and Mac development, and whenever I change something in one I need to also change in the other. The versions of some of the dependencies are also different between the two platforms, which will eventually need to be fixed. Setting up something like CMake will allow me to streamline this process and also start making Linux builds periodically, but I'm so not looking forward to learning CMake's scripting language and since this doesn't really cause much pain during day to day development, I'm postponing it as much as possible 😭
Compile times are slow 😞 I am a bit conflicted on how high a priority this should have, because my Mac compiles lightning fast compared to my old Windows laptop, but there is plenty of room for optimizing the compile times. I've done a few such optimization passes in the past, with good results. I'm not a fan of all the hacks and workarounds C++ programmers seem to have to do in order to make up for this antiquated build system. I haven't taken a look at module support in a while, but I doubt Apple has it yet so...
I need to set up an experiment to see what it'd be like for two or more developers to try to work on the same DuskEngine project, through something like branches and PRs in Git. Everything is text (JSON), but I'm not yet sure how smooth it would be. I know collaboration can be a major PITA, and would like to run into issues and fix them ASAP.
Another feature is the asset store functionality, which at the moment is more or less a stub, but on which I'd like to continue work sometime in the near future. This is so that the issue that some assets can come from a server somewhere, and need to support updating when new versions get released, is tackled as soon as possible.
On a somewhat tangential topic, I'm not yet sure how I'm going to handle having the games download assets while running, like how mobile games do it for example.
Also, two things I'd like to add in the future is support for web and at least one mobile platform (probably iOS because I already have the Metal renderer). Web is the most important because it'd make sharing builds with the world much easier. Mobile is so I get to see what packaging a game would work like under the constraints of mobile platforms.
Plus a bunch more features that I'm forgetting about 😄
- ← Previous
My first post