Awesome
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:
- Baldur Karlsson of github.com/baldurk/renderdoc
- Alexander Overvoorde of vulkan-tutorial.com
- Sascha Willems of github.com/SaschaWillems/Vulkan
- Joey de Vries of learnopengl.com
- Andrew Maximov for the pistol model and textures artisaverb.info/PBT.html
- FreePBR.com for the high-quality PBR textures
- All authors and contributors to the open-source libraries mentioned above
Blog
Stay (somewhat) up to date about this project on my blog at ajweeks.com/blog