For my masters project, I made a Performant Voxel Engine in C++ and OpenGL, using modern voxel rendering techniques, whilst striking a balance with potential artist input. Features include :
Performant Mesh generation using Binary Greedy Meshing
Reduced draw calls by sending data to the GPU in a smart and efficient manner.
Custom Voxel Models which can be created and loaded from JSON files by artists
Built in Scripting API that interacts with the engine using lua, allowing for quick iteration and gameplay development.
Ability to load and unload voxel blocks in the runtime.
Custom 'rules' based terrain generation, allowing for less redundant terrain generation using modern C++ and lambdas.
Custom property animation for models that can be updated in script.
Check out my full demo video here : https://youtu.be/Ky9QiJs7ovQ
Including setting animations for a model, setting the animations interpolation, moving the model, changing the models script, setting a tick function.
The Scripting implementation was made using the lua_c API, and designed to provide an easy way to understand how to extend the engine with functionality for artists.
One of the top priorities for my voxel engine was ensuring that the engine remained performant whilst still retaining its scalability and flexibility. To that end, I used a modified version of the Binary Greedy Meshing Algorithm to ensure that chunk meshes were able to be generated seamlessly in realtime.
My modified algorithm allowed for chunk meshes to be generated in a single iteration of the algorithm without running the algorithm multiple times for data such as ambient occlusion or for different textures.
One of the core tenets of the project is for it to be accessible and expandable to artists. To that end, I have built a custom generic animation library, for animating any value over a period of time. It is integrated into my scripting API for ease of access.
The 'genericness' of the library means more than just matrix transformations can be animated. For example, an entities health or state can be animated with custom interpolation.
Here you can see an example model with a spinning leg meant to demonstrate basic animation of a model component.