Kengine 4.1
This version adds an extensible OpenGL deferred rendering system.
Default shaders are provided, but these are absolutely not state of the art, as graphics programming is not my specialty. They include (poor quality) shadow maps and (pretty decent) volumetric lighting/god rays.
Systems have also been added to load 3D models, be they standard (.obj/.fbx/etc. loaded with the assimp library) or in MagicaVoxel's .vox format. The AssImpSystem also supports skeletal animation, although it has not been optimized at this point.
Performance has also been enhanced by the avoidance of runtime memory allocation, using putils::string, putils::vector and putils::function instead of their standard counterparts.
Features:
- Added serialization
- Made it possible to add/update entities during iteration
- Added
OpenGLSystem - Added
PolyVoxSystem(used to generate meshes from voxel volumes) - Added
MagicaVoxelSystem(used to load .vox model files) - Added
AssImpSystem(used to load any other model file and skeletal animations) - Added
SelectedComponentandHighlightComponent - Added
ImGuiEntityEditorSystemandImGuiEntitySelectorSystem
Major changes:
- The
SfSystemis no longer built as a plugin and is automatically linked if the option to build it is enabled
Minor changes:
kengineis no longer simply a CMake "interface library" but a full fledged static/shared library depending on your platform- The
ImGuiAdjustableManagerhas become aSystem - Added
pitchtoGraphicsComponent - Component IDs are now printed, which may help with debugging an
Entity's mask
Optimizations:
- Used
putils::string,putils::vectorandputils::functioninstead of their standard counterparts. These have the advantage of never performing memory allocation. - Compilation times have been reduced thanks to being a "normal" library
Fixes:
- Stopped using execution policies as they are not available on gcc
- Fixed
BehaviorComponentandBehaviorSystemwhich had not been updated to new API - Various fixes in scripting systems
What's coming next
The first thing I want to sort out is proper handling of object sizes in the OpenGLSystem. This was fairly simple with SFML as images were all loaded with the same default size. OpenGL introduces the fact that models may be created with different sizes, meaning that getting them to render properly and have their TransformComponent's size reflect reality implies playing around with the GraphicsComponent and TransformComponent sizes. This is not optimal.
I'm hoping to come up with a satisfactory solution for this soon enough and make a small release when that time comes. After that, I plan to implement a few toy projects with the engine in its current state to see what may be missing. One obvious thing is a menu system (and generally 2D rendering in OpenGL), so that may not be too far down the line.
