This framework is a demonstration of terrain generation, skinning and animation techniques I learned in my final year of university. It is written in C++/HLSL, and uses DirectX 11, Dear ImGui, and tinyxml2 to support it.
The terrain generation uses any of the Diamond-Square, Fault-Line or Hill algorithms, with configurable height, variation, and iterations (for Hill only) parameters. Additionally, I implemented a voxeliser and mesh generator, which convert the output from any of the algorithms to a singular voxelised mesh per chunk. Defaults for all of these and more are also configurable in loadable xml files.
For voxelised terrain, I also use Perlin noise to create Perlin worms in the terrain to form caves. For non-voxelised terrain, the application automatically uses tessellation shaders, which also handle LODs for the terrain based on distance to the camera.
The animation uses custom .skl (xml format) files to represent the bone structure for a model. Modified .obj files feed the skinning data into this, and .xml files are used to represent animations. I opted for this approach over something that natively supports animation, such as .fbx or collada, because it afforded me the opportunity to learn exactly how animation data fits together to influence a mesh. However, this is not something I would repeat in future due to the lack of tooling I had to support my homebrew formats. In my application, the animations are represented as key-frame transforms and the rigged mesh is represented by a left-child right-sibling binary tree. Transforms are processed per-bone in the update loop, and my vertex shaders handle the rest.


