Custom Engine Blightspire
Contents
- The Engine
- Graphics pipeline
- GBuffer Layout
- GPU Driven Rendering
- Draw Generation
- Animations
- Post-processing
In my third-year at BUas I had the opportunity of working on a custom tech project for the entire school year (4x 8 weeks). The brief for this project was to create a game for the Steam Deck, that had a hard requirement of having to run at 60fps. Making use of Vulkan as our graphics API, we created all the necessary parts for an engine. We aim to create a first-person shooter, and our engine design tries to reflect this.
My responsibility on the project was both graphics programmer and programmer lead. This meant I was mostly in contact with the rendering back-end/architecture, and worked on the main optimizations happening on the GPU. As programmer lead, I helped the team come to conclusions and make sure communication was happening between everyone.
The Engine
Libraries
#content
- Cereal for serialization and deserialization
- EnTT for ECS architecture
- Fast GLTF for glTF model format parsing
- FMod for audio integration
- FreeType for ImGui font support
- GLM for math related operations
- ImGui for editor interfacing
- ImPlot for displaying graphs
- Jolt Physics for collisions, hit testing, and rigidbodies
- Magic Enum for reflecting on enum classes
- SDL3 for cross-platform windowing, and inputs
- SpdLog for debug logging
- STB for image loading
- Steamworks for interfacing with the Steam API
- Tracy Profiler for integrating profiling
- Visit Struct for reflecting on structs
- Vulkan for interfacing with Vulkan
- SPIRV Reflect for reflecting spir-v binary format
- Vulkan Headers for using a modern C++ interface with Vulkan
- Vulkan Memory Allocator for abstracting memory allocations
- Wren Language for our scripting language
- WrenBind17 for C++ 17 support with wren
Feature list
#content
- Renderer
- GPU-Driven rendering
- Frustum culling
- Two-pass HZB occlusion culling
- Deferred renderer
- PBR lighting model
- Image based lighting
- Shadow Mapping
- Skeletal animations (skinning)
- FXAA
- SSAO
- Bloom
- Tonemapping (several options)
- Frame graph
- GPU-Driven rendering
- Physics
- Colliders
- Convex Hulls
- Mesh
- Primitives
- Ray casting
- Player controller
- Colliders
- Scripting
- Wren scripting language
- Bindings from different modules in the engine
- Assets
- glTF model loading
- Texture, mesh, hierarchy, animation parsing
- glTF model loading
- Pathfinding
- A* navigation
- Navmesh support
- Audio
- FMod integration
- 3D audio
- UI
- Font atlas
- Buttons
- Images
- Navigation
- Progress bars
- ECS architecture
- EnTT integration
- Profiling
- Tracy integration
- GPU profiling
- Automatic profiling per ECS system
- Automatic profiling per engine module
Graphics pipeline
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
GBuffer Layout
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
GPU Driven Rendering
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Draw Generation
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Animations
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Post-processing
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.