Fusion Frame engine is a framework type game engine that focuses on delivering a compact and easy-to-use interface for 3d game development while preserving speed. It also supports different physics algorithms to speed up the game development.
- Deferred rendering(soon to be clustered deferred as well as forward+ as an option)
- Omnidirectional shadows for point lights
- Linear shadows for directional lights
- PBR-IBL shading
- HDRI and cubemap support
- Deferred and forward mesh instancing
- Compute shader based particle emitter
- Skeletal animation support
- Deferred ScreenSpace decals
Also planning to implement a voxel based GI soon.
- Oct/Quad tree for general object class
- Half-edge mesh structure
- Easy collision mesh creation from meshes and bounding boxes
- AABB and SAT collisions
Also using half-edge data structure , wrote couple of premature mesh algorithms like subdivision for triangular meshes. Mesh utility algorithms like quickhull to create collision boxes are also in the TO-DO list
The overall API is pretty simple and user friendly. I'll try to demonstrate some of the functionality to get you started
- Initializing the window and the resources
const int width = 1000;
const int height = 1000;
FUSIONCORE::Window ApplicationWindow;
ApplicationWindow.InitializeWindow(width, height, 4, 6, false, "FusionFrame Engine");
FUSIONUTIL::InitializeEngineBuffers();
FUSIONUTIL::DefaultShaders Shaders;
FUSIONUTIL::InitializeDefaultShaders(Shaders);
- Importing a HDRI
FUSIONCORE::CubeMap cubemap(*Shaders.CubeMapShader);
FUSIONCORE::ImportCubeMap("Resources/rustig_koppie_puresky_2k.hdr", 1024, cubemap, Shaders);
- Engine supports both deferred and forward rendering so you can use a gbuffer to use deferred rendering.
const FUSIONUTIL::VideoMode mode = FUSIONUTIL::GetVideoMode(FUSIONUTIL::GetPrimaryMonitor());
FUSIONCORE::Gbuffer Gbuffer(mode.width, mode.height);
FUSIONCORE::FrameBuffer ScreenFrameBuffer(mode.width, mode.height);