Metaballs

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Deux metaballs

Les 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[1] au début des années 1980.

Chaque balle est définie comme un 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[modifier | modifier le code]

Une fonction typique pour des metaballs 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 continue, 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 metaballs n'influent l'une sur l'autre qu'à une distance raisonnable. Dans ce cas pour avoir de jolies metaballs (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 metaballs. 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 projete 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[modifier | modifier le code]

Une des nombreuses et des plus rapides méthode de calcul et d'affichage de metaballs 2D.

Les metaballs 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 metaballs 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 metaballs étant calculées via la production d'un champ scalaire, des variantes sont apparues comme les metatores, metaplans, ainsi qu'une variété d'objets plus ou moins faciles à définir mathématiquement de manière implicite.

Les metaballs 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 champs des metaballs et des metacubes ou autre metavolume.

 \frac{1}{(x-1)^2 + (y-1)^2 + (z-1)^2} + \frac{1}{\max(|x|, |y|, |z|)^2} \leq seuil définit une metaball proche d'un metacube.

Références[modifier | modifier le code]

  1. (en) J. F. Blinn, « A Generalization of Algebraic Surface Drawing », ACM Transactions on Graphics, vol. 1, no 3,‎ juillet 1982, p. 235–256 (lien DOI?)

Liens externes[modifier | modifier le code]