VertexColor et arêtes franches

Questions à propos du scripting Shader.
Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: VertexColor et arêtes franches

Message par artemisart » 04 Mai 2014 22:56

+1 pour Alesk, et donc la sphère de droite est le résultat attendu si chaque vertex n'est pas quadruplé

Image

Donc en fait la sphère de gauche doit avoir ses propres vertices pour chaque face, et donc des couleurs différentes pour les vertices aux même positions (tu utilise les smoothing groups ou un truc du genre pour séparer les faces ?).
boubouk50 a écrit :Une face est composée de 3 vertex, un vertex au milieu de 4 faces sont donc en fait 4 vertex identiques.
Admettons que Unity décide que c'est le même vertex alors je me retrouve qu'avec un seul vertex et une seule couleur de vertex possible à ce point.
Un vertex peut être partagé par plusieurs faces, donc 1 tri = 3 vertices, mais 2 tris = 6 ou 4 vertices par ex (4 dans le cas d'un quad, 6 pour 2 tris séparés, 5 pour 2 tris séparés mais avec un sommet commun, ...).
Après (c'est là que ça se complique) on peut toujours avoir un "quad" mais avec 2 tris séparés (et donc 2 vertices qui en sont en fait 4 :D) pour avoir des normals/couleurs/uvs/etc différentes (avec des vertices à la même position).
Et apparemment le mesh dans Unity se retrouve avec les vertices fusionnés, d'où l'interpolation des couleurs.

Donc si tu veux retrouver les couleurs de 3ds dans Unity vérifie d'abord que les vertices sont pas fusionnés à l'export (en ouvrant un obj avec un éditeur de texte ça devrait être assez rapide, tu vérifie que chaque position (v [nombre] [nombre] [nombre]) est dupliquée 4x), et ensuite faut forcer Unity à ne pas recalculer les normales en bidouillant les paramètres d'importation et ça devrait le faire (et tu peux toujours uploader un fichier max/fbx/obj pour qu'on essaye ;) ).

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: VertexColor et arêtes franches

Message par boubouk50 » 05 Mai 2014 13:53

@Artemisart: J'ai checké le .FBX d'export. En le réimportant dans max, je perds l'info, je me retrouve avec le même résultat que dans Unity. Je vais devoir chercher dans les options d'export, ou bien changer de format d'export. C'est déjà un début. Merci ;) (ce qui ne veut pas dire que il n'y pas de pb à l'import, mais faut déjà que je gère ce problème)

@Alesk: C'est vraiment sympa de proposer de l'aide, je ne sais pas si j'aurai un jour le temps de mettre les mains dans le cambouis, mais je n'hésiterai pas si jamais.

- EDIT -
le format OBJ exporte les Vertex Color? Je n'arrive pas à les avoir...
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: VertexColor et arêtes franches

Message par artemisart » 06 Mai 2014 16:57

Ok donc il y a déjà un problème à l'export ^^

Pour l'obj, effectivement j'avais pas pensé à ça x) je viens de vérifier la spécification "standard" et elle n'inclue pas de vertex color apparemment (bien que j'ai déjà vu certains exporteurs qui utilisaient vc [r] [g] pour ça).

Du coup ça serait possible d'exporter dans un format obj customisé avec des vertex colors en MAXScript ou autre ? (je connais très très peu 3ds), parce que à partir de là l'importation dans Unity serait relativement facile, suffit de modifier un peu un script de ce genre :P .

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: VertexColor et arêtes franches

Message par boubouk50 » 07 Mai 2014 11:27

Si je peux éviter de coder mon propre exporter, ça m'arrangerai quand même! :mrgreen:

En exportant le FBX en ASCII, je peux voir un peu ce qu'il se passe pour le VertexColor:

Code : Tout sélectionner

 LayerElementColor: 0 {
            Version: 101
            Name: ""
            MappingInformationType: "ByPolygonVertex"
            ReferenceInformationType: "IndexToDirect"
            Colors: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.498039245605469,0.498039245605469,1,1,1,1,1,1,1,1,1,1,0.247058838605881,0
             ,1,0,0.705882370471954,0.705882370471954,1,0,0.705882370471954,0.705882370471954,1,0,0.705882370471954,0.705882370471954
             ,1,1,0.247058838605881,0,1
            ColorIndex: 0,2,3,1,8,9,11,10,0,1,5,4,1,3,7,5,3,2,6,7,2,0,4,6
        }
Ceci est l'export d'un cube. Je comprends pas trop ce que signifie ColorIndex, mais j'ai 24 indices, donc 3 infos par Vertex (?).

- A Noter - J'ai 3 vertex qui ont deux couleurs, soit 11 vertex de couleurs différentes.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: VertexColor et arêtes franches

Message par artemisart » 07 Mai 2014 15:39

Tu n'as pas 24 vertices dans le fbx ? (parce que comment il fait pour différencier s'il n'y a que 8 vertices ???)

Je pense que Colors c'est les couleurs en format r0, g0, b0, a0, r1, g1, b1, a1, r2, g2, b2, a2, ... ce qui ferait 12 couleurs (blanc, rouge/rose, orange et bleu/turquoise, c'est en gros ça ?)
Et ColorIndex doit indiquer pour chaque vertex quelle couleur prendre (et l'index max est 11 donc il y a bien 12 couleurs).

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: VertexColor et arêtes franches

Message par boubouk50 » 07 Mai 2014 16:44

J'ai bien ces 4 couleurs. Donc pourquoi 12? -> Répétition des couleurs mais pourquoi pas 8 ou 24?
Ce que je constate néanmoins, c'est que les couleurs qui ressortent après l'export-import sont celles des 8 premières couleurs (le turquoise qui apparaît après, n'est pas pris). Comme-ci un raccourci allait chercher la couleur du premier sommet trouvé à cet endroit.

Code : Tout sélectionner

 Vertices: -11.92041015625,-12.3017349243164,0,11.92041015625,-12.3017349243164,0,-11.92041015625,12.3017349243164,0,11.92041015625
        ,12.3017349243164,0,-11.92041015625,-12.3017349243164,15.5752458572388,11.92041015625,-12.3017349243164,15.5752458572388
        ,-11.92041015625,12.3017349243164,15.5752458572388,11.92041015625,12.3017349243164,15.5752458572388
        PolygonVertexIndex: 0,2,3,-2,4,5,7,-7,0,1,5,-5,1,3,7,-6,3,2,6,-8,2,0,4,-7
        Edges: 0,1,2,3,4,5,6,7,9,11,13,17
        ....
        Normals: 0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,1,0,0,1,0,0,1,0,0,1,0,-1,0,0,-1,0,0,-1,0,0,-1,0,1,0,0,1,0,0,1,0,0,1,0,0,0,1,0
             ,0,1,0,0,1,0,0,1,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0
J'ai 8 vertices. 24 normales. Dans max, je peux accéder aux 24 vertices qui ont des couleur différentes. PolygonVertexIndex: y'a du négatif...
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: VertexColor et arêtes franches

Message par boubouk50 » 07 Mai 2014 17:06

Depuis le Map Channel Info de max:

ID: poly 8 verts
ID: vsel 8 verts
ID: vc 12 verts
ID: uvmap1 24 verts

Ce qui explique 12 couleurs.

(Je crois qu'on s'égare du Topic Shaders...?)
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: VertexColor et arêtes franches

Message par artemisart » 07 Mai 2014 18:42

boubouk50 a écrit :J'ai bien ces 4 couleurs. Donc pourquoi 12? -> Répétition des couleurs mais pourquoi pas 8 ou 24?
Aucune idée.

Pour PolygonVertexIndex, c'est négatif pour signifier la fin d'un "élement" je pense (0 1 -2 pour un tri et 0 1 2 -3 pour un quad).
boubouk50 a écrit :Dans max, je peux accéder aux 24 vertices qui ont des couleur différentes.
Oui mais ces vertices viennent d'où ? à moins que il faille implicitement splitter chaque vertex pour avoir un vertex unique par face...
boubouk50 a écrit :(Je crois qu'on s'égare du Topic Shaders...?)
Pas grave, c'est pas comme si on trollait :mrgreen: .

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

Re: VertexColor et arêtes franches

Message par Alesk » 07 Mai 2014 22:19

Quick réponse : http://stackoverflow.com/questions/7736 ... mat-for-me
http://thunderfist-podium.blogspot.fr/2 ... odels.html

On y trouve aussi l'explication pour les index négatifs :
regarding Edges, These are not vertex indices's, They are direct references to the PolygonVertexIndex array. Each edge is defined by that vertex and the next one in that face (if the index is < 0, it wraps around to the first index in that polygon). (I found this while writing an importer, if you load these values as edge-index-pairs you end up with scrambled edges all over the mesh)
EDIT: en fouillant un peu plus, je trouve d'autres explications sur ces index négatifs :
the negative values in PolygonVertexIndex are just used to indicate the end of a polygon.
It will be converted to a positive value by fbxreader according to certain rules.
à priori la règle dont il parle est :

Code : Tout sélectionner

indexPositif = (indexNegatif * -1) - 1
EDIT2 : j'ai vérifié avec tes données, et cette règle semble bien être la bonne.

Répondre

Revenir vers « les Shaders »