PhysX has been Nvidia’s party trick for well over a decade, but it seems that after all these years AMD wants to play catch up on that front too. The red team’s latest announcement is that its new FEMFX library is finally available, which offers deformable physics effects through the GPUOpen set of AMD-built libraries for developers.
The name FEMFX stems from FEM, which stands for Finite Element Method. AMD describes this as “Solid objects are represented as a mesh of tetrahedral elements, and each element has material parameters that control stiffness, how volume changes with deformation, and stress limits where fracture or plastic (permanent) deformation occur.”
The intention is not for all objects to have these properties, but rather in addition to existing solid objects in order to balance out the workload that stems from a scene — having all elements as finite elements would create a very demanding workload. Of course, if developers are so inclined, they could use the FEMFX library to create entire worlds which are completely destructible.
As mentioned, FEMFX is built as a highly-threaded library, which is a great way for AMD to promote its multi-core Ryzen CPUs. The core counts of those chips have been reaching levels where it no longer makes sense for most gamers to dish out for the higher-end models, so adding multi-threaded CPU-based physics to games can be a great way to utilize otherwise idle cores in the higher end Ryzen chips during gaming.
Some of the materials that can be simulated are elastic deformation, denting metal, wood destruction, and even melting. AMD’s full list of features is below.
Elastic and plastic deformation
Implicit integration for stability with stiff materials
Kinematic control of mesh vertices
Fracture between tetrahedral faces
Non-fracturing faces to control shape of cracks and pieces
Continuous collision detection (CCD) for fast-moving objects
Constraints for contact resolution and to link objects together
Constraints to limit deformation
Dynamic control of tetrahedron material parameters
Support for deforming a render mesh using the tetrahedral mesh