Hephaestus is personal learning-purpose game engine.
Feature/Module | Description | Third-party libs |
---|---|---|
ECS | Entity-Component-System | EnTT |
Editor | UI, simple asset manager via UUID and editor built-in content browser. | ImGui, ImGuizmo |
Serialization | Save scene info in file or load scene from file | yaml-cpp |
Scripting | Call Engine (native C++) from C# (scripting). Use ScriptEngine as the bridge between managed/unmanaged language. Support Hot Reloading. | Mono |
Graphics | Simple PBR Shader with PCSS shadow. Shader uniform reflection via SPIR-V. Vulkan/OpenGL as graphics pipeline backend. | glad, SPIR-V Cross/Tools, stb, NsightAftermath, assimp, VulkanMemoryAllocator |
Physics | 2D and 3D physics, simple rigidbody dynamics. | Box2D, PhysX |
Event System | Dispatch window events, input events etc | GLFW |
Logging | Log for different severity and assertions | spdlog |
Binaries: see release page.
-
Git LFS
-
OS: Windows 10/11 64bits
-
IDE: Visual Studio 2022 / Rider 2023.3
-
Install xmake (version >= 2.8.5)
-
Install Vulkan SDK 1.3 with shader debug symbols (64bits)
Note: By the end of release v0.0.1, C# is not official supported by xmake. I pull a request to xmake to support C# but it’s a early-stage naive support for C# that not fit into xmake’s toolchain backend. Thus it’s not accepted and merged yet. During the development I use that pr to test C# workflow. However currently I have to comment out C# projects in xmake.lua otherwise build errors will occur.
git clone --recursive https://github.com/Kethers/Hephaestus
or clone without recursive and init/update submodule after initial cloning:
git submodule init
git submodule update
After submodules are pulled, click GenerateProjects.bat or use below command:
xmake project -k vsxmake
In Debug mode, loading time can be long since assimp takes long time to load models.
Scenes that are currently available are listed below, you can drag them from editor’s content browser panel (under assets/scenes) to the viewport so as to load the scene. Default opening scene is SponzaDemo.
- LightingTest
- levels/Physics2DGame
- ShadowTest
- SponzaDemo
- Alt + Mouse moving: rotate around.
- Alt + Mouse scroll button pressed: panning
- Mouse scroll rolling: zoom in/out
- Mouse click in viewport or in hierarchy panel to select a entity, W/E/R to activate the gizmo control.
- WASD : movement/walk
- Space : jump
- Shift + WASD: run
Release v0.0.1 has a lot of imperfections due to Vulkan’s difficulty, such as
- 3D player movement is not frame-independent, so in release mode player will move faster.
- Mouse pickup of entity that has rigidbody2D will lead to crash
- ImGui Vulkan code is not completed and now has validation errors
- Vulkan resources are not released in the right order which reports validation error
- Animation shader that used to work in OpenGL is currently broken.
- In SponzaDemo scene, when player capsule is too close to the stone handrail, the fps will fall dramatically
IDE Build: Currently the some project dependencies are generated as a project which slows down building process. In the future xmake package will be more widely used in project to manager third-party libs such as Box2D, yaml-cpp, etc.
Vulkan: New Vulkan Memory Allocator has vma usage such as VMA_MEMORY_USAGE_AUTO
, try update old code that reference from others. Fix validation errors. Multiframes in flight and more advanced topic.
- Hazel with Cherno’s Game Engine Series and his other dev logs. (code structure, 3D resources)
- Vulkan Tutorial
- SaschaWillems’s Vulkan Examples