Comment créer une trace de plasma pour un vaisseau spatial

13

J'ai vu beaucoup de superbes jeux spatiaux qui utilisent tous des effets similaires. Je suis vraiment intéressé à découvrir comment certains de ces effets se produisent généralement.

En particulier, je veux savoir comment certaines des pistes derrière les vaisseaux spatiaux ou les missiles sont accomplies sans utiliser toutes les ressources disponibles.

Pour des exemples de l'effet, je veux dire voir les captures d'écran de Gimbal , et même la vidéo sur ce même lien. Aussi les traînées de missiles dans Ether Vapor .

S'agit-il des deux mêmes techniques? Je m'intéresse principalement à la 2D, mais je ne peux pas imaginer que ce serait trop différent.

Alors, comment pourrais-je créer ce type d'effet? Parlons-nous de pixel shaders, de modes de mélange / filtres, d'effets bitmap, de systèmes de particules ou quoi? Pas vraiment spécifique à la plateforme. Je cherche juste la théorie, mais des exemples ou des liens spécifiques seraient formidables. Et plus de détails, mieux c'est.

Adam Harte
la source

Réponses:

7

Alors, comment pourrais-je créer ce type d'effet? Parlons-nous de pixel shaders, de modes de mélange / filtres, d'effets bitmap, de systèmes de particules ou quoi? Pas vraiment spécifique à la plateforme. Je cherche juste la théorie, mais des exemples ou des liens spécifiques seraient formidables. Et plus de détails, mieux c'est.

Tout ce qui précède.

À moins de fouiller dans leur code source, vous ne savez peut-être pas exactement comment ils l'ont fait.

Cependant, d'après l'apparence des deux jeux, ils ont tous deux ce qui semble être une géométrie qui est connectée et suit le navire. Ce n'est peut-être pas nécessairement un système de particules point-sprite de base, mais ce n'est pas si difficile non plus.

Certains jeux utiliseront un algorithme de ligne courbe et généreront une liste de sommets à partir de cela et feront un peu de texturation avec différentes textures appliquées aux deux points de terminaison de la piste, de sorte qu'à un moment l'échappement semble chaud et à l'autre il est plus frais et traîne dans l'espace.

Le vaisseau d'un joueur est un cas intéressant parce que les mouvements sont imprévisibles, et vous devrez peut-être mettre à jour les points de contrôle de votre algorithme de courbe, ou finir par échantillonner la dernière position du vaisseau et générer des positions de sommet basées sur cela.

Jetez un oeil à cette réponse d'une question précédente si vous voulez avoir quelque chose qui fonctionne hors des points de contrôle. Pour vos besoins, l'échantillonnage de la position des joueurs fonctionnerait probablement beaucoup mieux et serait plus facile à comprendre.

Voici quelque chose pour vous faire réfléchir:

Commencez à échantillonner la position du joueur. Ces points formeront les segments du corps de votre piste, à partir desquels la géométrie peut être construite. C'est une bonne idée de garder un segment de queue séparé qui a une texture distincte. Vous voudrez peut-être détecter quand un joueur tourne et augmenter la fréquence de ces segments, sinon vous vous retrouverez avec des courbes en blocs. Sauf si c'est l'effet que vous recherchez :)

À certains événements, les segments doivent cesser de se produire et les segments existants devraient commencer à se réduire lentement, en commençant par le segment de corps le plus proche de la queue (mais pas la queue elle-même). C'est en cas de ralentissement du joueur. Mais, si la vitesse à laquelle les segments sont réduits correspond à la vitesse du navire du joueur, alors un nouveau segment sera formé juste à temps au fur et à mesure que l'un d'eux sera retiré. Donc, cela fonctionne aussi bien pour un navire en plein mouvement. La longueur du sentier sera toujours la même - ce qui donne un flux fluide et cohérent.

Le segment de tête doit toujours être à la position actuelle du joueur. Si des virages sont détectés, le segment de tête existant est ajouté à un segment de corps et un nouveau segment de tête est démarré. Répéter. Selon vos textures, chaque segment peut également avoir une longueur maximale.

Cela nous donne un moyen facile de modéliser cet effet: en partant de l'idée que l'effet diminuera / rétrécira toujours par lui-même à moins que davantage de segments ne soient fournis, et en jouant avec des vitesses pour l'empêcher de rétrécir.

Jovan
la source
4

Il existe de nombreuses possibilités pour créer de tels sentiers. Vous pouvez utiliser des lignes simples, des polygones, des nuages ​​de points, etc.

Ils sont généralement basés sur l'un des deux concepts suivants:

  • Suivez les positions précédentes et utilisez-les pour dessiner la queue.
  • Suivez la vitesse / direction et ajustez la queue en fonction de cela.

La première est mieux adaptée à des choses telles que les missiles, tandis que la seconde approche est meilleure pour certaines sortes de choses attachées suivant quelque chose (comme la queue d'un dragon).

Une implémentation simple pour les queues de moteur n'est pas si compliquée. Vous n'aurez besoin que d'un tampon pour stocker les positions précédentes. Je ne sais pas quelle langue vous utilisez, mais pour cela, j'utiliserais soit un tampon en anneau, soit une sorte de tampon similaire (suppressions et insertions rapides aux extrémités).

Chaque x-ème frame / mise à jour (vous n'avez pas à le faire cent fois par seconde), vous déposez essentiellement le plus ancien / dernier élément dans votre tampon et ajoutez la position actuelle à son avant (uniquement si le tampon est rempli; assurez-vous qu'il contient toujours n éléments, où n détermine la longueur de votre queue).

Ensuite, pendant le dessin, vous commencez simplement à votre position actuelle et tracez un ensemble de lignes à travers tous les points de votre tampon, tout en réduisant votre opacité à chaque sommet supplémentaire.

De cette façon, vous devriez vous retrouver avec une queue agréable et propre. En fonction de votre plate-forme, vous pouvez l'étendre, par exemple en utilisant des shaders ou en enveloppant un joli graphique de queue le long de ce chemin.

Mario
la source