Changement de texture précis après collision
- Yondaime13
- Messages : 55
- Inscription : 16 Mars 2015 16:42
Re: Changement de texture précis après collision
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 ?
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.
----------------------------------------
La bêtise, c'est de la paresse.
----------------------------------------
Re: Changement de texture précis après collision
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 : 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
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 : 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
- Yondaime13
- Messages : 55
- Inscription : 16 Mars 2015 16:42
Re: Changement de texture précis après collision
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 !
----------------------------------------
La bêtise, c'est de la paresse.
----------------------------------------
La bêtise, c'est de la paresse.
----------------------------------------
- Yondaime13
- Messages : 55
- Inscription : 16 Mars 2015 16:42
Re: Changement de texture précis après collision
Si tu connais un super tuto sur ça je suis preneur
----------------------------------------
La bêtise, c'est de la paresse.
----------------------------------------
La bêtise, c'est de la paresse.
----------------------------------------
Re: Changement de texture précis après collision
Heu... là comme ça non, j'en ai pas... Google, tout ça, tu vois hein
- Yondaime13
- Messages : 55
- Inscription : 16 Mars 2015 16:42
Re: Changement de texture précis après collision
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.
----------------------------------------
La bêtise, c'est de la paresse.
----------------------------------------
Re: Changement de texture précis après collision
Non, tu parentes tout simplement des gameobjects empty sur ton objet principal.
- Yondaime13
- Messages : 55
- Inscription : 16 Mars 2015 16:42
Re: Changement de texture précis après collision
Ha en gros je prend des objets vides et je fais partir les rayons de leur origine c'est ça ?
----------------------------------------
La bêtise, c'est de la paresse.
----------------------------------------
La bêtise, c'est de la paresse.
----------------------------------------
Re: Changement de texture précis après collision
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.
- Yondaime13
- Messages : 55
- Inscription : 16 Mars 2015 16:42
Re: Changement de texture précis après collision
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.
----------------------------------------
La bêtise, c'est de la paresse.
----------------------------------------