Flex Engine is a personal game engine I began work on in early 2017. I use it as a playground for learning about real-time rendering and simulation techniques. Flex Engine is not a commercial game engine nor is it intended for public use.
Building Flex
See build.md
Notable Features
- Vulkan rendering backend (VulkanRenderer.cpp)
- In-game scripting language compiler/editor & virtual machine (VirtualMachine.cpp)
- Conditional checksum-based shader recompilation (ShaderCompiler.cpp)
- File modification monitoring for textures, meshes, prefabs, shaders, config files, etc. (ResourceManager.cpp)
- Scene editor with serialization (BaseScene.cpp)
- Editor tools (transform gizmo, property editor, keybinding editor, etc.) (Editor.cpp)
- Basic profiling capture/inspection tools
- Support for Windows & linux
- Rendering:
- Marching cubes terrain generator & renderer
- Gerstner wave ocean renderer
- Rectangular area lights (direct-only diffuse & specular)
- Physically-based shading model
- Image-based lighting
- Screen-space ambient occlusion
- Stable cascaded shadow mapping
- Temporal anti-aliasing
- Signed distance field (SDF) font generation & rendering
- GPU-based particle simulation
Procedural terrain generated on the GPU
Gerstner wave ocean simulation
Cascaded Shadow Mapping
Two million particles simulated and rendered entirely on the GPU
Profiler overlay showing a breakdown the CPU-time of a single frame
Some editor windows
Screen-Space Ambient Occlusion (SSAO)
GBuffer (top-left to bottom-right): position, albedo, normal, final image, depth, metallic, AO, roughness
View into editor
See more screenshots here
Dependencies
Flex Engine uses the following open-source libraries:
-
Bullet - Collision detection & rigid body simulation
-
FreeType - Font loading
-
glfw - Window creation, input handling
-
glm - Math operations
-
ImGui - User interface
-
OpenAL - Audio loading and playback
-
stb - Image loading
-
cgltf - Mesh loading
-
volk - Vulkan meta-loader
License
Flex engine is licensed under the MIT license. See LICENSE.md for details.
Acknowledgements
A huge thank you must be given to the following individuals and organizations for their incredibly useful resources:
Blog
Stay (somewhat) up to date about this project on my blog at ajweeks.com/blog