Skip to content

KaganBaldiran/FusionFrame-Engine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GitHub language count GitHub top language GitHub last commit License: MIT

FusionFrame-Engine

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.

Rendering Abilities

  • 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.

Physics Abilities and Data Structures

  • 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

Ray/Path Tracing

Currently has a ray/path tracer with reflections , indirect lighting and shadows. Ray tracing is done on a compute shader using a hybrid BVH(top and bottom) for acceleration.

Here are quick demo scenes and visualization of the BVH structure. Scenes don't belong to me. image image image

Documentation

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);

Current Look

winter_scene_fusion_frame image image image image image image image image image image image