Skip to content

ajweeks/FlexEngine

Repository files navigation

linux MIT licensed

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