Pour y arriver, les simulations de haute qualité utilisent surtout la méthode des éléments finis (FEM, en anglais). Elle consiste à diviser l'objet à simuler en petites surfaces (que l'on considère souvent comme planes) : plus il y a de surfaces, plus la simulation sera précise… et chère. Le solveur informatique mémorise la position de chacune de ces surfaces (position du centre, orientation) et simule leur évolution le long de la surface et au fil du temps (à l'aide d'équations aux dérivées partielles, le plus souvent : ces dernières sont discrétisées au niveau des surfaces et écrites sous la forme d'un système d'équations linéaires). Une extension de cette technique est la méthode des éléments finis étendue (en anglais, XFEM) : la différence principale est la possibilité de simuler des discontinuités, comme un objet qui se brise.
(Source : Wikipedia.)
En pratique, cette méthode n'est pas très utilisée dans les jeux vidéo : elle est très puissante, mais nécessite trop de calculs — surtout qu'une solution très précise n'est pas nécessaire, la simulation doit juste être plausible. La FEM est parfois présente pour précalculer certains mouvements ou pour des animations qui ne sont pas calculées en temps réel. Les solveurs FEM utilisés dans l'industrie et la recherche sont toujours fortement parallélisés et distribués, ils utilisent régulièrement des accélérateurs comme des cartes graphiques (par dizaines, au moins). D'où la surprise quand AMD annonce FEMFX, une implémentation de la FEM à destination de jeux vidéo, donc en temps réel.
FEMFX est écrite spécialement pour gérer le cas d'objets déformables. Les objets sont représentés à l'aide d'éléments tétraédriques, les paramètres physiques (rigidité, module de Young, coefficient de Poisson) étant définis par élément. Ce solveur part donc des principes physiques bien connus, avec l'inconvénient d'un très grand nombre de paramètres avec lesquels les développeurs de jeux vidéo ne sont pas habitués à travailler.
L'idée d'AMD est d'exploiter les possibilités de calcul parallèle des processeurs modernes (notamment ses Ryzen et Threadripper, dont le haut de gamme monte maintenant à trente-deux cœurs et bientôt soixante-quatre), c'est-à-dire sans carte graphique. Il n'empêche, les développeurs de FEMFX ne visent pas très haut (par rapport aux simulations par éléments finis traditionnelles) : pour eux, un objet ne devrait pas dépasser un millier de tétraèdres. Par exemple, la simulation de canard fondu ci-dessous utilise à peine trente-trois tétraèdres par canard.
De même, ils ne recommandent pas d'utiliser une telle simulation pour l'entièreté d'une scène : les simulations actuelles d'objets rigides resteront l'outil principal pour les années à venir, avec des techniques plus évoluées pour certains effets (comme les objets fortement déformables). C'est pour cela que FEMFX est prévue pour s'intégrer avec des moteurs physiques existants, avec une implémentation des contraintes à l'aide d'un solveur itératif entièrement compatible avec la manière dont les simulations rigides sont pour le moment effectuées dans les jeux vidéo. Une API pour la résolution coordonnée des contraintes entre éléments finis et objets ridiges est disponible, mais ce principe n'est pas souvent disponible dans les moteurs physiques…
Actuellement, le code source et des intégrations à Houdini (pour l'édition du contenu) et à Unreal Engine (pour le rendu) sont disponibles. L'intégration à Houdini affiche les paramètres de conditionnement de la scène, qui indiquent à quel point elle pose des problèmes pour la résolution numérique (c'est-à-dire que FEMFX ne peut pas proposer une bonne solution rapidement : la simulation risque d'être très laide à regarder).
Le code source est disponible sur GitHub.
L'extension Unreal Engine peut aussi y être téléchargée.