A simple 3D game engine using C++20 and Vulkan.
This project is a revamp of the original LittleEngineVk
.
- PBR materials
- HDR lighting
- Value semantic interfaces (using external polymorphism)
- GLTF support
- Skinned meshes
- Rigged animations
- Decoupled skeletons (for reuse with mutiple meshes)
- Skeleton instances (active in a scene tree)
- JIT shader compilation (
glslc
required) - Asset providers
- Hot reloading
- Instanced static mesh renderer
- Skinned mesh renderer
- Scene (in-game)
- Asset (de)serialization + hot reload
- Scene management
- Fonts and text
- Dynamic rendering (no render passes)
- In-game UI
- Shadow mapping
- Audio
- AABB collisions
- CMake 3.18+
- C++20 compiler and stdlib
- OS with desktop environment and Vulkan loader (
libvulkan1.so
/vulkan1.dll
)- Windows 10
- Linux: X, Wayland (untested)
- Mac OSX: untested, will require MoltenVk
- GPU supporting Vulkan 1.3+, its driver, and loader
- Vulkan SDK /
glslc
(for compiling glsl shaders to SPIR-V, and validation layers)
LittleEngineVk (levk::lib
) is a library intended to be built from source and linked statically, it currently does not support any installation / packaging.
Link to levk
via CMake: target_link_libraries(foo PRIVATE levk::lib)
.
- Clone this repository somewhere.
- Use CMake and a generator of your choice to configure an out-of-source build (
build
andout
are ignored in git). - If using CMake 3.20+ / Visual Studio in CMake mode / CMake Tools with VSCode,
CMakePresets.json
can be utilized (and/or extended viaCMakeUserPresets.json
) for convenience.- Use
cmake --preset <name>
to configure andcmake --build --preset <name>
to build on the command line. - Visual Studio CMake and VS Code CMake Tools should pick up the presets by themselves.
- Use
- For other scenarios, use CMake GUI or the command line to configure and generate a build.
- Command line:
cmake -S . -B out && cmake --build out
. - If using an IDE generator, use CMake GUI to configure and generate a build, then open the project/solution in the IDE and build/debug as usual.
- Command line: