Changement de texture précis après collision

Questions à propos du scripting Shader.
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 » 01 Avr 2015 15:19

à priori il n'y a pas de coordonnées uv sur la partie qui t'intéresse c'est pour ça que ça déconne.
J'en ai rajouté et ça fonctionne ensuite parfaitement dans unity.
Comme ceci :
1) passe en vue de dessus et sélectionne le mesh en edit mode
2) ajoute une couche uv
3) fais la projection avec Project From view (Bounds) -> le bounds c'est pour s'assurer que la projection occupe tout l'espace uv
uv_os.jpg
uv_os.jpg (256.17 Kio) Consulté 4997 fois
Puis tu sauves et tu importes le fichier bend dans unity.
Une fois dans ta scène, à part ton os spongieux, tu places tous les autres objets dans le layer "Ignore Raycast", et zou ça devrait fonctionner direct avec le script de projection. (en tout cas pour moi ça le fait :p)
os_project.jpg
os_project.jpg (36.44 Kio) Consulté 4997 fois
Par contre, pour alléger un peu plus, tu devrais extraire juste la partie supérieure (la coupe) de ton os spongieux, afin de t'en servir comme mesh collider.
ça sera beaucoup plus rapide à traiter par le raycast que d'utiliser tout le mesh, avec toute sa partie inférieure qui ne sert jamais.

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 » 01 Avr 2015 15:40

Je vais voir merci !

Oui merci pour le conseil un ami à moi m'a conseillé d'alleger au maximum mon projet de toute façon car si ça dépasse 250Mo, vu que c'est destiné pour un iPad, ça risque de cracher :lol:
----------------------------------------
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 » 01 Avr 2015 15:44

Oué là tu as beaucoup trop de polygones. Tu devrais appliquer le modificateur "Decimate" de blender afin d'optimiser un peu tes meshes.

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 » 01 Avr 2015 15:52

Ouai je sais mais malheureusement pour mon projet je dois faire une vertèbre la mieux modélisée possible et c'est déjà assez difficile comme ça pour juste un petite deuxième année d'école d'ingénieur pour moi mais je vais essayer de mettre le "decimate" comme tu me conseilles ;)

En tout cas désolé si je parais comme un vrai boulet sur Unity ça fait vraiment que 2-3 semaines que j'ai pris en main le logiciel :oops:
----------------------------------------
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 » 01 Avr 2015 16:36

Dans la solution que tu m'as proposé plus haut tu crois qu'il est possible que les 4 points d'impact qu'on peut voir sur ta photo, relier ses points et remplir le carré avec une autre texture ? :roll:


LudlowFx : Désolé j'y penserai à l'avenir :oops:
Dernière édition par Yondaime13 le 01 Avr 2015 16:49, édité 1 fois.
----------------------------------------
La bêtise, c'est de la paresse.
----------------------------------------

Avatar de l’utilisateur
LudlowFx
Messages : 1367
Inscription : 19 Sep 2013 05:50

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

Message par LudlowFx » 01 Avr 2015 16:39

Yondaime13 : Une fonction EDIT existe ! Inutile de double/Triple poster page après page alors que personne n'a répondu..
Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !

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 » 01 Avr 2015 17:57

Yondaime13 a écrit :Dans la solution que tu m'as proposé plus haut tu crois qu'il est possible que les 4 points d'impact qu'on peut voir sur ta photo, relier ses points et remplir le carré avec une autre texture ? :roll:
Oui bien sûr, j'en ai même parlé dans mes réponses précédentes.

Pour obtenir ça, il faut trouver une méthode pour faire le remplissage rapidement (là j'ai pas trop fouillé) et au lieu de colorer les zones RGB de la texture, tu ne remplis que la couche alpha qui doit donc être totalement à 0 au départ pour que tout soit transparent et apparaissent au fur et à mesure.

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 » 02 Avr 2015 09:05

Donc tu veux dire qu'il faut que j'ai une deuxième texture qui sera transparente au début et qu'au fur et à mesure de l'avancement de l'outil celle-ci apparaisse ?

Comment tu t'occupes de la gestion de la couche alpha ? J'y connais pas grand chose là dedans .. ( la couche alpha c'est en gros la forme de mon objet ou ma texture sans les couleurs ni rien, c'est ma définition de la couche alpha quand je faisais du Photoshop :lol: )
----------------------------------------
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 » 02 Avr 2015 10:34

Yondaime13 a écrit :Donc tu veux dire qu'il faut que j'ai une deuxième texture qui sera transparente au début et qu'au fur et à mesure de l'avancement de l'outil celle-ci apparaisse ?
oui
Yondaime13 a écrit :Comment tu t'occupes de la gestion de la couche alpha ? J'y connais pas grand chose là dedans .. ( la couche alpha c'est en gros la forme de mon objet ou ma texture sans les couleurs ni rien, c'est ma définition de la couche alpha quand je faisais du Photoshop :lol: )
Il faut voir la couche alpha comme un masque qui laisse plus ou moins apparaitre certains pixels, regarde dans l'onglets "couches" de photoshop, tu y verras chaque canal (r,v,b et a).
Techniquement, la couche alpha c'est la même chose que la couche de rouge, de vert ou de bleu : c'est une image en niveau de gris, mais au lieu de contrôler l'intensité d'une couleur, ça contrôle l'opacité.
Si la valeur est à 0 (noir), c'est totalement transparent, et si c'est 1 (blanc) c'est totalement opaque.
http://www.webopedia.com/TERM/A/alpha_channel.html

Donc là, ce que tu peux faire :

1) chopper la liste des valeurs des pixels de l'image ans un tableau avec http://docs.unity3d.com/ScriptReference ... ixels.html
2) faire une boucle dans ce tableau pour modifier la valeur alpha des pixels qui t"intéressent.
3) assigner le tableau modifié à la texture avec http://docs.unity3d.com/ScriptReference ... ixels.html

Comme le tableau récupéré est en une dimension, et que ta texture est en deux dimension, voici comment s'y retrouver : http://stackoverflow.com/questions/2151 ... 1d-array-c

A noter, qu'il n'est pas utile dans ce cas de refaire un GetPixels à chaque update : tu peux stocker le tableau résultant dans une propriété de ta classe et le mettre à jour dans l'update.

Pour le remplissage de la zone de pixels, il y aurait bien une fonction du type floodfill, mais ça ne conviendrait pas à tous les coups (et serait relativement compliqué à mettre en place).
Le mieux est encore de considérer les 4 points testés comme formant un polygone (donc il faut bien les assigner à ta classe dans l'ordre) et de détecter si chaque pixel se trouve dedans ou en dehors de ce polygone.
Exemple de comment faire ici http://alienryderflex.com/polygon/

Ensuite, tu n'es pas obligé de faire une boucle sur tous les pixels de la texture. Connaissant les positions des 4 points, tu gardes les valeurs extrêmes de leurs coordonnées (X min et max et Y, min et max) pour restreindre le traitement à cette zone rectangulaire.

Là je pense que t'as tout ce qu'il te faut pour conclure :mrgreen:

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 » 02 Avr 2015 11:07

Je connais bien l'algo de floodfill (utilisé pour faire un démineur en JAVA ;) ) mais là je viens de faire juste une double boucle for mais bon ça marche que si ça fait une forme rectangulaire et que j'ai que 4 points mais vu que moi ça fait normalement une forme de pointe ça va être plus compliqué :D

Juste une dernière question, comment tu fais pour réinitialiser ta texture après avoir changé ses pixels ? Parce que en relançant une autre fois après les pixels rouges ne disparaissent pas :oops:
----------------------------------------
La bêtise, c'est de la paresse.
----------------------------------------

Répondre

Revenir vers « les Shaders »