Créer laser

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Avatar de l’utilisateur
ZJP
Messages : 5748
Inscription : 15 Déc 2009 06:00

Re: Créer laser

Message par ZJP » 08 Mai 2013 15:15

Oui.
La technique du tir/impact instantané est vieille. On la retrouve avec bonheur dans FlashBack de Delphine. 8-)

Edit :

@Cayou. Je me souviens de ton laser. :D

Edit 2 :

Vidéo tuto sur le pooling.

http://www.youtube.com/watch?v=1nm9oISSHqI

Edit 3 :
Liste des outils de "Pooling" sur l'Asset Store. Je ferais un jour un sujet la dessus dans la rubrique "Outils Externes"

CorVuS
Messages : 56
Inscription : 25 Avr 2013 13:49

Re: Créer laser

Message par CorVuS » 08 Mai 2013 16:50

Merci pour toute ses infos, il faut tester et digérer tout ca maintenant :?

Avatar de l’utilisateur
yoyoyaya
Messages : 1656
Inscription : 30 Mai 2011 13:14
Localisation : PAAAAARTOUUUU
Contact :

Re: Créer laser

Message par yoyoyaya » 08 Mai 2013 18:11

Je sais qu'il faut que j'utilise le lineRenderer mais je n'y arrive pas,
J'arrive un peu tard mais bon.
Juste pour te dire que dans le tuto de mecanim, le robot utilise (il me semble) le lineRenderer pour créer des lasers qui sortent des yeux. Tu pourrais peut-être aller voir dans le projet fourni avec (si ça n'a pas déjà été le cas).
ImageImage

Avatar de l’utilisateur
Freelax
Messages : 1595
Inscription : 30 Déc 2009 23:02
Localisation : Niort
Contact :

Re: Créer laser

Message par Freelax » 08 Mai 2013 20:03

Dans la demo AngryBot d'Unity 3.5 ya un laser :D

https://www.youtube.com/watch?v=IpTa3rz8_nk
Image

Avatar de l’utilisateur
Titan
Messages : 582
Inscription : 12 Sep 2011 13:54
Contact :

Re: Créer laser

Message par Titan » 10 Mai 2013 00:59

c'est à la mode les lasers!

je sais pas trop comment faire le fx d'impact de mon laser, pour l'instant j'instancie des particules d'étincelle régulièrement, mais c'est moche...
(et puis j'ai pas fait de pool!!!)

Je voudrais faire blanchir le mesh au point d'impact, si le laser reste en place le blanc s’étend à la surface du mesh, et si on bouge ça laisse un sillon qui passe du blanc au rouge puis au noir progressivement.
un peut comme le sabre laser de force unleashed: https://www.youtube.com/watch?v=qLmn2lzFJWI#t=7m45s (7:45).
Je sais pas trop comment prendre le problème, armée de petit projecteur ? trail ? un shader ?
il doit y avoir une solution "simple", les changements de textures procéduraux basé sur les points d'impact des armes, on en voit régulièrement dans les jeux, et y'a jamais d'artefact qui laisse transparaître la technique de rendu, même pour des mesh à géométrie complexe.
Dernière édition par Titan le 10 Mai 2013 13:37, édité 2 fois.
____________________________________________
Hop Boy

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: Créer laser

Message par Alesk » 10 Mai 2013 11:54

Pour laisser la marque de chauffe sur ton mesh, tu peux soit utiliser un line renderer customisé (c'est à dire fait par toi) collé par dessus ton mesh, soit dessiner directement sur un texture. Pour l'option du shader, je ne m'y connais pas assez dans ce domaine pour te conseiller.

Si tu décides d'utiliser un line renderer, il va falloir gérer une liste de points d'impacts à la surface de ton mesh, et relier ces points par une bande de polygones qui se conforme aux normales de la surface en dessous. En mémorisant l'instant de création de chaque point d'impact, tu pourras en déduire leur age et donc faire varier leur couleur comme tu le désires.
Il faut en plus prévoir le cas des poses dans le mouvement de ton laser, dans ce cas il faudra ajouter juste un billboard circulaire pour marquer ces points chauds.

Pour que l'effet visuel soit convaincant, il faut utiliser un shader en transparence additive pour les parties chaudes, et en multiply pour les zones noircies (qui devront certainement être affichée via une copie de ton line render, en dessous du premier), mais jamais en alpha blend de base, ça sera moche.

Sinon, pour le dessin sur la texture, il faut utiliser les coordonnées UV de chaque point d'impact pour dessiner sur une texture à part (donc pas celle de l'objet, une autre) qui sera affichée par dessus.
là c'est un peu plus compliqué car il faut parvenir à rectifier les distorsions éventuelles engendrées par le dépliage UV de ton objet. (si tu fais un dépliage qui conserve les dimensions relatives des polygones, il n'y aura pas trop de problèmes)
Donc là on va dire que tu pars sur une texture noir sur laquelle tu vas tracer des cercles gris (toujours en additif, pour que le cumul tire vers le blanc).
avant d'ajouter chaque nouveau point, tu dois superposer une image noire quasi transparente à l'ensemble de ta texture afin d'atténuer la luminosité des tracés précédents.
Tu utilises ensuite cette texture dans un shader pour la recolorer comme tu veux, en utilisant les différentes teintes de gris comme indicateur de température.
(ce n'est pas l'unique façon de procéder hein, il faut en tester d'autre pour voir laquelle est la plus rapide)

En utilisant la méthode rendertotexture, il a moyen d'avoir quelque chose de rapide je pense... mais bon c'est dans l'ensemble assez complexe, l'intérêt étant qu'avec une texture, ça suivra parfaitement la forme de ton objet s'il est complexe, ce qui sera plus difficile à obtenir avec un mesh créé dynamiquement et collé par dessus.

Mais si tu te limites à des objets relativement plats ou avec des courbures régulières, ça passera sans trop de soucis.

EDIT : j'avais pas matté la vidéo du jeu starwars, donc là je dirais qu'ils utilisent la 1ere méthode : la bande de polygones... mais je trouve leur effet tout moche, on peut faire beaucoup mieux :p

EDIT 2 : pour tracer des lignes de polygones sur un mesh : viewtopic.php?f=2&t=5801&start=30 :mrgreen:

Avatar de l’utilisateur
Titan
Messages : 582
Inscription : 12 Sep 2011 13:54
Contact :

Re: Créer laser

Message par Titan » 10 Mai 2013 13:28

Merci de ton aide.

La solution du line renderer fait maison, j'ai peur que la ligne passe à l'intérieur du mesh sur les pointes et les objets sphériques, à moins de trouver un algo qui ne se contente pas de tracer un quad avec 2 position et 2 normal, mais qui suive précisément la géométrie du mesh.

L'idée de dessiner dans une texture un disque à chaque impact est intéressante, par contre il y a certains pré requis assez lourd sur les UV de mes meshs, pas de mirroring, échelle constante sur tout les objets de mon jeu, etc. et j'ai aussi peur qu'on voit apparaître les disques si le laser se déplace vite (il doit pouvoir balayer la scène librement), et je ne pense pas qu'on puisse relier simplement les points sur la texture sans obtenir un résultat douteux (je peut essayer de voir si les perfs suivent avec des raycast intermédiaire). sinon pour appliquer ça, il faudrait rajouter une pass à tout les shaders que j'utilise (et donc abandonner complètement les shader built-in) ? ou alors il y a une autre solution ?
____________________________________________
Hop Boy

Avatar de l’utilisateur
Max
Messages : 8784
Inscription : 30 Juil 2011 13:57
Contact :

Re: Créer laser

Message par Max » 10 Mai 2013 13:40

Titan a écrit :L'idée de dessiner dans une texture un disque à chaque impact est intéressante, par contre il y a certains pré requis assez lourd sur les UV de mes meshs, pas de mirroring, échelle constante sur tout les objets de mon jeu, etc. et j'ai aussi peur qu'on voit apparaître les disques si le laser se déplace vite (il doit pouvoir balayer la scène librement), et je ne pense pas qu'on puisse relier simplement les points sur la texture sans obtenir un résultat douteux (je peut essayer de voir si les perfs suivent avec des raycast intermédiaire). sinon pour appliquer ça, il faudrait rajouter une pass à tout les shaders que j'utilise (et donc abandonner complètement les shader built-in) ? ou alors il y a une autre solution ?
regarde du coté des decals, pour ce genre d'effet c'est une alternative interessante....
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: Créer laser

Message par Alesk » 10 Mai 2013 17:00

Titan a écrit :La solution du line renderer fait maison, j'ai peur que la ligne passe à l'intérieur du mesh sur les pointes et les objets sphériques, à moins de trouver un algo qui ne se contente pas de tracer un quad avec 2 position et 2 normal, mais qui suive précisément la géométrie du mesh.
Oui, y'a pas vraiment le choix... si tes mesh sont très détaillés ça va nécessiter de bien suivre la géométrie, tu pourrais nous poster une image d'exemple d'un objet "complexe" sur lequel tu voudrais appliquer cet effet ?


EDIT : une piste à creuser -> http://blog.wolfire.com/2009/06/how-to-project-decals/

Avatar de l’utilisateur
Titan
Messages : 582
Inscription : 12 Sep 2011 13:54
Contact :

Re: Créer laser

Message par Titan » 10 Mai 2013 22:55

J'ai pas encore de mesh complexe mais juste une sphère ou les arrête d'un triangle pourrai poser problème avec une ligne simple entre 2 points.
J'ai proposer l'idée des projecteur dans mon premier post mais je vois pas trop comment faire... si à chaque frame j'ajoute un projecteur qui affiche le trait entre les 2 frames, à 120fps en 10 secondes je me retrouve avec 1200 projecteurs, et si y'a 10 joueurs avec des lasers 12 000 projecteurs ? et je parle même pas d'update la couleur.
Mais je prend un cas extrême, peut être que si on se contente de tracer un grand trait toutes les 10 frames et qu'on limite à 1000 projecteurs sur la map ça peut passer ? Je connais pas du tout l'impact sur les perf des projecteurs, en fait je savais même pas comment c'était fait avant de suivre ton lien.

Je vais essayer ce weekend et je vous tiens au courent, ça à le mérite d'être rapide à implémenter.
____________________________________________
Hop Boy

Répondre

Revenir vers « Scripting »