DummyEngine is a small cross-platform 3D game engine, capable of rendering, simple physics simulation and scripting.
At the moment, the engine has not so much functionality. Here is a full functionality list:
-
Stable:
Renderer
- creates a layer of abstraction from rendering API and provides a lot of rendering wrappers. Capable of 3D model rendering and several post-processing effectsPBR and Phong
- engine provides 2 most popular rasterization techniques. PBR stands for Physical Based Rendering and allows to render realistic looking objects utilizing a widely used set of material properties like roughness, metallic, ambient occlusion and normal maps. PBR also allows to use enviroment as a light source. Phong model is much simpler and gives less realistic looking results while being more performantHDR and Tone Mapping
- allows to render in High Dynamic Range to prevent color values from clipping into the standard range [0, 255], while Tone Mapping gives control over conversion to the standard range, taking into account gamma and exposureBloom
- creates bloom effect for overly bright objects and emissive surfacesECS
- stands for Entity Component System and allows to create various objects using components instread of inheritence. All components are stored in contiguous arrays, which reduces the number of cache misses and results in better performance of Systems. ECS also allows to create custom Systems, which can operate on component arrays of specified typesScripting
- allows to write game code in C++ scripts and then attach them to a entities. Scripts are loaded through dynamic libraries, which allows to change the game code and see the changes without recompiling the entire engine and editorScenes
- provides scene file format for loading and saving game scenesLogger and Profiler
- logger allows to track game and engine state while profiler allows to measure performance of engine, by measuring time of specified scopesModel Loading
- support of loading 3D models of most popular formats like fbx, gltf and objShadows
- support of rendering with shadows
-
Experimental (WIP):
Animations
- allows to load skelets and animations for meshes and play themPhysics Engine
- allows to simulate simple physics like a gravity and collision of boxesAdudio Engine
- allows to play 3D sounds for a more immersive gaming experience
Inspector
- a panel that allows to modify components of entitiesSceneHierarchy
- a panel that allows to organize scene entities into folders for more convinient scene navigatingProfiler
- a panel that allows to monitor performance of engineRenderer
- a panel that allows to control rendering process and post-processing effectsThemes
- a panel that allows to change editor color themeViewport
- a panel that displays a scene and allows to play, stop, step and pause scene
Render Graph
- a graph that manages render passes and resources, allowing to exceute rendering in other threadTask System
- a system that will allow to pass long background tasks, like loading textures or modles to worker threads
- ASSIMP - library for loading various 3D model formats
- GLAD - library for finding OpenGL function and creating rendering context
- GLFW - cross-platform windowing library for handing inputs and creating native os windows
- GLM - math library with vectors, matrices and quaternions. Also implements a lot of usefull math functions
- IMGUI - GUI library for editor interface
- NDF - library for creating native os file dialogs
- STB Image - library for loading various texture formats
- YAMLCPP - yaml parser
Requirements:
- OpenGL compatible GPU
- Supported C++ compiler
- Supported OS
Supported OS:
- Windows
- Linux
- Macos (partial)
C++ Compiler:
- GCC (14.0.0+)
- Clang (12.0.0+)
- Apple Clang (12.0.0+)
Errors may occur on other OS and/or compilers
Build:
At first you can try running build.sh
script from project root dir. If some errors occur here is step-by-step guide:
- Start by cloning the repository with
git clone --recurse https://github.com/Mag1str02/DummyEngine
- Create build directory by
mkdir build
- Move to build dir by
cd build
- Configure by
cmake -DCMAKE_BUILD_TYPE=Release ..
- Build by
cmake --build . --target=DummyEditor --config=Release
- Go to sandbox directory by
cd ../Sandbox
- Run editor by
./DummyEditor
(file extension may vary across different os)
To change cmake generator add -G [your generator]
arg on step 4
To change build mode change Release to your build mode on steps 4 and 5
If you need to build only engine library change target on step 5 to DummyEngine