Comment reproduire l'effet de distorsion de Geometry Wars?

12

J'essaie d'obtenir l'effet de distorsion que vous voyez dans des jeux comme Geometry Wars .

Capture d'écran de Geometry Wars avec effet de distorsion

Quelqu'un peut-il aider à expliquer ce qui se passe ici? J'ai l'impression que l'axe z de la grille est manipulé d'une manière ou d'une autre par le programmeur, mais y a-t-il peut-être une équation mathématique connue pour vraiment obtenir l'effet de déformation correct?

Edit: Pour être plus précis, je veux dire la déformation de la grille. Comment tout semble tiré vers l'axe z négatif, puis rebondit.

Joey Green
la source
1
Faites-vous référence à l'arrière-plan qui se plie? Comme c'est Geometry Wars , il y a beaucoup de chaos dans la capture d'écran, ce qui m'a fait me gratter la tête pendant un certain temps pour essayer de dire à quoi vous faisiez référence.
Grace Note
Oui le fond se plie.
Joey Green

Réponses:

12

Une mise en place de 10 minutes d'un système de ressort simple (ou du moins dit-il sur son blog ;)). Le système peut gérer plusieurs chaînes et autres déformations de la grille.

Mis à jour pour ajouter quelques détails supplémentaires:

Quelques autres détails. À partir d'une interview qui était auparavant hébergée sur le site Web de Bizarre Creations (ce site a maintenant disparu en raison de la fermeture de l'entreprise), il y avait une question:

Q: L'une des nouvelles fonctionnalités graphiques les plus frappantes du jeu est la zone de jeu «grille de gravité». Comment avez-vous rendu cela si cool? chaque objet du jeu a-t-il vraiment sa propre gravité? La grille elle-même est composée de 60 000 points, chacun exerçant une petite force sur son voisin. La simulation elle-même est à la limite de la stabilité, ce qui la fait tellement osciller lorsque l'un des objets du jeu lui donne un petit coup de pouce! Seuls quelques types d'objets affectent la grille. Comme le système de grille est assez cher à calculer, il fonctionne en fait sur le deuxième noyau avec le système audio (le premier noyau étant dédié au gameplay et aux particules, le troisième est utilisé pour rendre l'audio).

Roger Perkins
la source
1

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.

Chris Subagio
la source
Cool merci je vais essayer ça. L'algorithme que vous décrivez est-il essentiellement un effet de ressort?
Joey Green
Non, je n'ai pas décrit comment cela varierait dans le temps, donc pas un ressort. Je viens de décrire comment obtenir la forme de distorsion que vous recherchez. L'animer dans le style GW nécessiterait d'ajouter un autre facteur là-haut, modulant i au fil du temps. Essayez d'implémenter le tout et il devrait devenir clair pour vous que vous pouvez mettre à l'échelle i pour vous détendre ou intensifier votre effet. Passez une onde sinusoïdale à travers cette valeur de modulation, ou faites-la rebondir comme un ressort 1D et vous rebondirez efficacement le tout. Encore une fois, une fois que vous avez un harnais avec un tas de variables flottant, l'expérimentation sera votre ami.
Chris Subagio