I've been reading up a lot on a thesis called Procedural Destruction of Objects for Computer Games by Joris van Gestel. Today I want to talk about one section of his thesis, which discusses previous work on procedural destruction. Van Gestel mentions that he sent a questionnaire out to a variety of game companies and asked them what they thought the most important aspects were for destruction in video games. From his results, he found out that "the five most important aspects were control, speed, ease of use, ease of integration, and the quality of the result." Surprisingly, none of those companies thought "realism" was an important aspect, as long as the destruction in the game seemed good enough.
Van Gestel mentions that the most common approaches to destruction in video games nowadays are Finite Element Methods (FEM) and Shape Matching Methods.
For today I'm going to talk briefly about FEM. Tomorrow I will discuss Shape Matching.
Finite Element Methods (FEM) are considered numerical techniques for solving many different kinds of mechanical engineering problems and mathematical physics problems. These are commonly used in computer graphics as well for destruction! In terms of destruction, FEM work on meshed 3D models. Think of meshed models as 3D models that rely on a grid of interconnected simulation vertices. Finite Element Methods use these meshed models to determine "how forces propagate through a continuous volume, usually the inside of an object", as Van Gestel states; this helps us analyze crack initiation and how that crack propagates throughout the rest of the object's volume in a video game, depending on that object's actual material. These existing techniques of FEM utilize the external forces on the object and relate them to the internal forces on the object using the object's material properties. Through analyzing these internal forces, FEM can determine where the object will crack and in what direction to propagate the crack even further!
The internal forces acting on the object are calculated node by node in the FEM mesh. For those confused on what a 'node' is, it is just a vertex (or point) in the mesh. For each node, the internal force on that node can be decomposed into two components: a tensile component and a compressive component. With these two force components (tensile and compressive), we can combine them together mathematically and treat them as a single "separating" force (discarding any unbalanced forces) that is used for indicating whether or not material failure (fracturing) occurs at that specific node. If this separating force has a magnitude larger than that of the material's toughness, then a crack is initiated and will most likely propagate. If there was material failure as a result of this separating force, we can find the plane of fracture on the current node and then split along that plane! After the current node is split, the algorithm continues on to calculate the separating forces on remaining vertices and repeating this whole process. This is the simplified representation of Finite Element Methods with destruction in video games.
You may be asking: "I'm a little confused. How do we know where the object is cut?" Well, it gets a little mathematical. This separating force is really calculated using a mathematical entity called Tensors. If you are confused or if you'd like me to explain the exact mathematics behind it, let me know in the comments below or contact me individually!
Anyway, Finite Element Methods generate super realistic results! However, the downside of using FEM is speed. It is very, very, very slow. For just a one-second animation, it can take up to 6 hours! This is partly due to the splitting of nodes along the fracture plane. As you increase the number of split nodes, the total number of nodes in the simulation also increases. More nodes in a simulation means more time to render! Thus as an object starts to fracture, the number of nodes in the simulation increases and that slows down rendering time. These methods are usually hard to implement in code too (again, due to Tensors)