Je ne sais pas s'il y a une façon "correcte" de le faire, mais c'est probablement juste une transformation linéaire esthétiquement agréable appliquée avec une diminution calculée de la distance à un point.
Donc, pour tout élément avec lequel vous travaillez, vous devez:
- trouver la distance au centre de la chaîne (d)
- calculer 1 - d / la distance maximale de l'effet que vous souhaitez (i pour l'intensité)
- fixer cela à [0-1]
- transformer l'élément par lerp (identité, transformer, i)
Iirc, les guerres de géométrie l'ont appliqué comme une distorsion déformante à certains éléments, tandis que d'autres éléments comme les particules étaient juste affectés par la "force", sans être déformés. Vous pouvez appliquer la distorsion dans un vertex shader, en supposant que vous disposiez de suffisamment de sommets pour échantillonner l’effet en douceur. Alternativement, vous pouvez tout d'abord rendre tout ce qui doit être affecté dans un tampon hors écran, puis rendre les résultats sur un quadrillage bien tessellé auquel vous appliquez la distorsion, avant d'ajouter tous les éléments non déformés sur le dessus.
Quant à la transformation, la mise à l'échelle vous donnera le look d'aspiration. Si je me souviens bien, il y avait aussi des torsions en cours, ce qui ne serait qu'une petite rotation.
Vous pouvez devenir plus fantaisiste avec vos calculs du facteur d'intensité pour obtenir des effets plus farfelus. Vous pouvez, par exemple, calculer l'angle (a) qu'un élément est par rapport au centre et en tenir compte. Prenez cos (a) et vous pouvez créer des ondes radiales dans l'effet. Ce que vous voulez faire, c'est vous mettre en place avec le code d'échafaudage nécessaire, puis aller en ville expérimenter différentes combinaisons de facteurs.