Joshua Simons - University Final Year Project
Borne of frustration at current game crafting systems and a desire to make something more interesting and more like actual crafting instead of a list based collectathon
The idea of this project is to create simulated experience of blacksmithing.
Maniuplating 3D solids plastically by simulating forces and adjusting meshes.
Ideally resulting in a system which just inputs and outputs a singular mesh.
This is the main part of the project. We want to be able to modify the mesh by applying local forces/transformations to it, whilst maintaining a constant volume. Ideally these local effects will approximate real world blacksmithing to a degree by using physical simulations.
Working directly with the mesh is a very complex topic which is hard to grasp and difficult to directly develop upon, so first I've started implementing simpler primitive shapes that allow for mor limited trasnformations in the hopes to combine/expand upon those as the project goes along! (See Simple Primtives below.)

*
I've implemented a simple class to display and connect vertices. This class will have the associated variables/functions to be able to pass a force through the vertices.

Having an easy to see/understand model will help speed up development, and assist in communicating in the report at the end.
The idea here was to start small and create something fast/light which can be strung together.
We can use lots of the same pieces to create a larger, more complex whole.
This shape is a staple of human thought. All its edges and faces are axis-aligned which makes working on it easier to comprehend and scaling it in different directions easier mathematically.

In the gif above you can see how applying hits to a certain side of the cuboid will shrink it in that axis and expand the other axes to maintain volume. This algorithm is very fast and can be adjusted to shrink the cuboid by any percentage amount in one axis, even using values greater than one to pull a face and stretch out the cuboid in that axis instead.
This is very rudimentary and does not give any ability to change the topology at all. But may still be a useful part of a larger simulation process when just starting out with cuboid billets, and is thus a welcome optimisation which very well may continue right into the finished product.
A tetrahedron is the simplest possible 3D shape, being made of the smallest number of the simplest possible 2D shape (4 Traingular Faces). In this variation we imagine the tetrahedron as a combination of a face and an opposing vertex. When maintaining volume, the distance of the vertex to the face is inversely proportional to the size of the face. Increasing one by a factor of 2 means decreasing the other by a factor of 2.
For this version we only care about the vertex as a 1D line away from the plane and thus all transformations apply along that normal line. We apply a scalar force along that normal and expand transformations out around that.
Rather than a proportional 1 dimensional up-down approach this tetrahedron does things the other way around. The vertex is moved along a vector by a certain amount then the proportional difference in height to the opposing face is figured out and the face then expands or contracts to maintain volume.
Here's where I'll show the progress of chaining mutiple primitives together by connecting common vertices, edges, and faces.
It's important to break down larger more complex shapes into smaller, more manageable ones.