# Métaballe

Les métaballes (de l'anglais metaballs) sont une technique utilisée en infographie pour créer des formes organiques ou représenter des fluides. En français, on trouve également la dénomination « objets mous ». Les metaballs sont une variante des soft objects mais le nom s'est imposé dans la littérature et dans les logiciels. Ce concept a été inventé par Jim Blinn au début des années 1980.
Chaque balle est définie comme une fonction mathématique à N dimensions. Les plus courantes sont en trois dimensions, on définit alors la fonction $f(x,y,z)~$. Cette fonction retourne un scalaire et permet de définir un champ scalaire. Une valeur de seuil est ensuite choisie pour délimiter la surface. Il est possible de mélanger plusieurs balles qui vont mutuellement s'influencer et contribuer aux valeurs du champ scalaire.
    $\sum _{i=0}^{n}{\mathit {metaball}}_{i}(x,y,z)\leq {\mathit {seuil}}$
indique si le point $(x,y,z)~$ se trouve à l'intérieur du volume confiné par la surface.

## Exemples de fonctions

Une fonction typique pour des métaballes est $f(x,y,z)={\frac {1}{(x-x_{0})^{2}+(y-y_{0})^{2}+(z-z_{0})^{2}}}~$, où $(x_{0},y_{0},z_{0})~$ est le centre de la balle. La division rend cependant cette fonction assez lente à calculer. On peut utiliser à la place des approximations polynômiales.
Voilà quelques propriétés que peut avoir cette fonction :
* si l'on cherche à faire des sphères, il faut que la fonction ne dépende que de la distance : $d={\sqrt {(x-x_{0})^{2}+(y-y_{0})^{2}+(z-z_{0})^{2}}}~$.
* si l'on cherche à créer une surface sans ressaut, il faut que la fonction soit continue.
* si l'on cherche à créer une surface lisse (sans rupture de pente), il faut que la fonction soit à dérivée continue.
* si l'on cherche à créer une surface avec des reflets continus, il faut que la fonction soit à dérivée seconde continue.
Pour pouvoir accélérer les calculs, il peut être intéressant d'avoir une fonction nulle au-delà d'une certaine distance, pour que les métaballes n'influent l'une sur l'autre qu'à une distance raisonnable. Dans ce cas pour avoir de « jolies » métaballes (continues, lisses et sans rupture des reflets) avec des polynômes, la fonction la plus simple est : $f(x,y,z)=g(d)=(d_{max}^{2}-d^{2})^{3}~$ si $d<d_{max},0~$ sinon.
Plusieurs méthodes existent pour afficher des métaballes. Elles dépendent du résultat désiré :
* force brute discrète : on évalue un grand nombre de points (x, y, z) et on affiche le résultat en fonction de l'appartenance au volume
* lancer de rayon : on projette un rayon dans la scène et on calcule les intersections avec la surface de l'objet
* marching cubes : on divise la scène en une multitude de cubes ; chaque cube et ses valeurs du produit scalaire aux sommets sont analysés et des triangles sont générés en fonction de 256 configurations possibles.

## Variantes

Les métaballes existent en deux dimensions, utilisant alors une superposition de sprites modifiés (addition et posterisation par exemple) ou l'algorithme des marching squares pour l'affichage de la surface pleine. Ces métaballes sont bien moins gourmandes à calculer que la version en trois dimensions, et permettent un plus grand nombre d'améliorations, pour un résultat bien évidemment moins réaliste. Un effet de bump peut être ajouté pour donner une impression de 3D.
Les métaballes étant calculées via la production d'un champ scalaire, des variantes sont apparues comme les métatores, métaplans, ainsi qu'une variété d'objets plus ou moins faciles à définir mathématiquement de manière implicite.
Les métaballes ressemblent à des sphères qui se mélangent doucement, mais en changeant la norme avec laquelle on travaille on peut obtenir des ellipsoïdes, des cubes, des parallélépipèdes rectangles ou des cylindres. Pour cela on peut utiliser les mêmes fonctions de la distance $d~$, mais en prenant non pas la distance euclidienne mais la distance associée à la norme 1 ou à d'autres normes qui vont alors déformer l'espace. Il est même tout à fait possible de mélanger dans un même champ des métaballes et des métacubes ou autre métavolume.
${\frac {1}{(x-1)^{2}+(y-1)^{2}+(z-1)^{2}}}+{\frac {1}{\max(|x|,|y|,|z|)^{2}}}\leq seuil$ définit une métaballe proche d'un métacube.