Nightbird Engine
Nightbird is my cross-platform C++ game engine with Vulkan rendering. Windows and Linux .
Available on
Started as an OpenGL renderer to develop my understanding of graphics programming, the project became my own game engine. I migrated to Vulkan.
Platforms
A backend system allows platform and rendering functionality to be implemented for different platforms.
Architecture
Nightbird was originally designed around runtime type reflection and dynamically loaded projects. This approach was great for the editor, but unsuitable for the app especially on the new platform targets. The functionality is planned to be reimplemented for the new editor, while the app will remain statically compiled.
Project code containing custom object types was compiled as a shared library and loaded at runtime. These types were then displayed alongside built-in objects in the editor, with custom properties exposed in the inspector and custom behaviour during simulation.
App
The app is the executable deployed to the target platform, loading cooked assets generated by the editor.
The input provider interface is implemented for all platforms, with audio provider implementations currently in progress.
Editor
The Nightbird Editor provides utility functions for importing assets from source formats (e.g., .glb, .flac) and cooking them into containers (e.g., .nbtexture, .nbaudio). When cooking for the Nintendo 3DS, this uses the platform-specific formats t3x for textures and DSP-ADPCM for audio.
The previous version of the editor used Dear ImGui for the UI, and this will soon be implemented for the new editor and its new functionality.
The previous version of the editor features various windows:
- Scene Outliner - Displays the objects in the scene in a reparentable hierarchy
- Inspector - Displays serialised properties of the selected object
- Asset Browser - Browse folders and files contained within the Assets folder. Double-click on a scene to open it.
- Scene - Render and traverse the 3D scene from the perspective of the Editor Camera.
When editor UI is reimplemented for the new version of the engine, a Game window is planned where the scene will be rendered from the main camera.