Page 5 sur 7

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

Publié : 01 Avr 2015 15:19
par Alesk
à 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é 5039 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é 5039 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.

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

Publié : 01 Avr 2015 15:40
par Yondaime13
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:

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

Publié : 01 Avr 2015 15:44
par Alesk
Oué là tu as beaucoup trop de polygones. Tu devrais appliquer le modificateur "Decimate" de blender afin d'optimiser un peu tes meshes.

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

Publié : 01 Avr 2015 15:52
par Yondaime13
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:

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

Publié : 01 Avr 2015 16:36
par Yondaime13
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:

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

Publié : 01 Avr 2015 16:39
par LudlowFx
Yondaime13 : Une fonction EDIT existe ! Inutile de double/Triple poster page après page alors que personne n'a répondu..

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

Publié : 01 Avr 2015 17:57
par Alesk
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.

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

Publié : 02 Avr 2015 09:05
par Yondaime13
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: )

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

Publié : 02 Avr 2015 10:34
par Alesk
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:

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

Publié : 02 Avr 2015 11:07
par Yondaime13
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: