Changement de texture précis après collision

Questions à propos du scripting Shader.
Avatar de l’utilisateur
Yondaime13
Messages : 55
Inscription : 16 Mars 2015 16:42

Re: Changement de texture précis après collision

Message par Yondaime13 » 27 Mars 2015 16:24

C'est vraiment le plus compliqué ? Je parle bien de la partie rose (la plus présente sur la vidéo) qui devient rouge après passage de la sonde !

Donc la solution est un dépliage UV de la zone c'est ça ? En gros je vais devoir relever les points d'impacts et en fonction de ceux-ci calculer la zone à re-texturiser ?
----------------------------------------
La bêtise, c'est de la paresse.
----------------------------------------

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

Re: Changement de texture précis après collision

Message par Alesk » 27 Mars 2015 17:13

Bon, je détaille un peu plus :

Tu dois avoir ton mesh avec 1 ou 2 dépliages uv en fonction de comment tu veux le visualiser.
Si tu veux y coller une texture pour afficher la matière en plus de la coloration en rouge, il vaut mieux avoir des coordonnées UV pour la texture de matière et d'autres coordonnées UV dédiées uniquement à la texture qui affichera les zones rouges.

La texture qui affichera les zones rouges sera unique, tu n'as pas besoin d'avoir plusieurs images.
Par contre cette texture sera redessinée en temps réel.

Pour dessiner sur ta texture, il faut reporter les mouvements 3D de la pointe de l'outil dans l'espace 2D de la texture. Cet espace étant les coordonnées UV utilisées pour projeter la texture.

Pour y parvenir, il faut utiliser la fonction RayCast() qui va te permettre de projeter des rayons sur ton objet afin de détecter les points d'impact.
Voilà un dessin, ça sera plus parlant :
projection_rectangle.png
projection_rectangle.png (12.53 Kio) Consulté 3886 fois
1) Tu détermine 4 positions fixes à l'extrémité de ton outil, ces emplacements te serviront de points de repère pour lancer les raycasts (là il faudra jongler avec les layers pour ne détecter la collision que sur la surface en dessous, à voir dans la doc unity)

2) une fois que tu as fait les 4 raycasts, tu as 4 points d'impact sur ta surface. Il faut regarder dans la doc au sujet de RaycastHit
De là tu obtiendras les coordonnées uv correspondantes

3) à partir de ces coordonnées, tu en déduis les limites de la zone à remplir sur la texture

4) tu n'as plus qu'à colorer tous les pixels se trouvant dans la zone délimitée (là faut creuser du coté des fonctions de manipulations des textures comme SetPixel)

Sinon, autre méthode : en utilisant une RenderTexture, tu peux utiliser une caméra qui va filmer en vue de dessus et directement afficher ça dans une texture que tu pourras ensuite afficher directement.
Il faudra bien sûr filmer une version alternative de tes objets, pour qu'il n'y ait que deux couleurs, du blanc pour la surface de fond et du rouge pour l'outil, et tu utilises le mode de fusion "multiply" pour afficher la texture.
Dans ce cas il faudra aussi modifier le paramètre "clearFlags" de la caméra avec la valeur "nothing" pour que les rendus précédents s'accumulent.

En y réfléchissant, cette seconde option est peut être moins compliquée au niveaux des maths et du code... donc à toi de voir celle qui te convient ;)

Avatar de l’utilisateur
Yondaime13
Messages : 55
Inscription : 16 Mars 2015 16:42

Re: Changement de texture précis après collision

Message par Yondaime13 » 27 Mars 2015 17:31

Ok mais je pense choisir la première proposition elle me paraît plus clair dans mon esprit mais je vais devoir suivre pas mal de tutos vu que je ne sais faire aucune des étapes moi-même haha ! :lol:
----------------------------------------
La bêtise, c'est de la paresse.
----------------------------------------

Avatar de l’utilisateur
Yondaime13
Messages : 55
Inscription : 16 Mars 2015 16:42

Re: Changement de texture précis après collision

Message par Yondaime13 » 27 Mars 2015 17:35

Si tu connais un super tuto sur ça je suis preneur ;)
----------------------------------------
La bêtise, c'est de la paresse.
----------------------------------------

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

Re: Changement de texture précis après collision

Message par Alesk » 27 Mars 2015 17:38

Heu... là comme ça non, j'en ai pas... Google, tout ça, tu vois hein ;)

Avatar de l’utilisateur
Yondaime13
Messages : 55
Inscription : 16 Mars 2015 16:42

Re: Changement de texture précis après collision

Message par Yondaime13 » 30 Mars 2015 10:04

Comment tu fais pour déterminer 4 points fixes de ton objet ? Ici un point est un vertice tu veux dire ?
----------------------------------------
La bêtise, c'est de la paresse.
----------------------------------------

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

Re: Changement de texture précis après collision

Message par Alesk » 30 Mars 2015 13:20

Non, tu parentes tout simplement des gameobjects empty sur ton objet principal.

Avatar de l’utilisateur
Yondaime13
Messages : 55
Inscription : 16 Mars 2015 16:42

Re: Changement de texture précis après collision

Message par Yondaime13 » 30 Mars 2015 15:14

Ha en gros je prend des objets vides et je fais partir les rayons de leur origine c'est ça ? :D
----------------------------------------
La bêtise, c'est de la paresse.
----------------------------------------

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

Re: Changement de texture précis après collision

Message par Alesk » 30 Mars 2015 15:20

C'est ça, et tu peux les placer un peu au dessus du reste, pour être certain que le rayon part d'assez loin et ne rate pas la surface.

Avatar de l’utilisateur
Yondaime13
Messages : 55
Inscription : 16 Mars 2015 16:42

Re: Changement de texture précis après collision

Message par Yondaime13 » 30 Mars 2015 16:29

Et quand ça c'est fait je forme un espèce de rectangle sur la texture du mesh et ensuite je pourrai changer la texture dans ce rectangle ;)
----------------------------------------
La bêtise, c'est de la paresse.
----------------------------------------

Répondre

Revenir vers « les Shaders »