[RÉSOLU] Espace visible à travers le maillage

Questions à propos du scripting Shader.
Assis
Messages : 14
Inscription : 12 Août 2019 19:26

[RÉSOLU] Espace visible à travers le maillage

Message par Assis » 21 Oct 2019 17:42

Bonjour,

Pitit problème lorsque je tire sur mon mesh sur blender tout va bien mais une fois sur Unity un espace se creuse entre les "edges".
Problème.png
Problème.png (17.24 Kio) Consulté 1334 fois
J'ai essayé de moins tirer sur le mesh mais je me retrouve toujours avec le même problème.
J'ai aussi augmenté la "Subdivision surface" mais rien à faire hormis du lag à cause du millions de vertices du mesh.

Mise à jour.
Je viens de me rendre compte que le problème n'apparaît que avec mon shader personnalisé et non avec un shader standard.

À l'aide.

Merci. :merci:
Dernière édition par Assis le 25 Oct 2019 21:23, édité 2 fois.

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

Re: Espace visible à travers le maillage

Message par Alesk » 21 Oct 2019 18:49

Bah fais voir ton shader...

Assis
Messages : 14
Inscription : 12 Août 2019 19:26

Re: Espace visible à travers le maillage

Message par Assis » 22 Oct 2019 15:26

Mince je ne suis pas dans la bonne partie du forum... :gene:

Effectivement c'est du côté du shader que vient le problème.
Je m'essaye à la tesselation et en augmentant la variable _Displacement (qui calcule la profondeur) j'ai constaté que c'est là que le maillage s'ouvre lorsque les vertices sont plus éloignés les uns des autres.
En tout cas pour l'instant je peux toujours séparer les zones plates pour que la tesselation puisse marcher mais j'aimerai bien que ça fonctionne également en pente.


Code : Tout sélectionner

   
    float _Displacement;

            void disp (inout appdata v) 
            {
                float d = tex2Dlod(_Splat, float4(v.texcoord.xy,0,0)).r * _Displacement;
                v.vertex.xyz -= v.normal * d;
				v.vertex.xyz += v.normal * _Displacement;
            }

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

Re: Espace visible à travers le maillage

Message par Alesk » 22 Oct 2019 19:44

Ton mesh est lissé ou bien les facettes sont visibles ?

Assis
Messages : 14
Inscription : 12 Août 2019 19:26

Re: Espace visible à travers le maillage

Message par Assis » 24 Oct 2019 10:49

Il est lisse : Subdivision surface + Smooth modifiers.

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

Re: Espace visible à travers le maillage

Message par Alesk » 24 Oct 2019 11:03

Oui mais une fois exporté dans Unity, il faut bien s'assurer que les modificateurs sont appliqués...
Après, là il semblerait que les normales ne soient pas les mêmes pour tous les vertices, mais c'est pas simple à évaluer sans avoir les mains dans le code.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 5141
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: Espace visible à travers le maillage

Message par boubouk50 » 25 Oct 2019 09:28

Effectivement, cela ressemble à une séparation des normales au sommet. En gros, des faces non-lissées.
Le displace déplace les sommets selon leur normales:
  • pour un mesh lissé les sommets adjacents (ou superposés) partagent la même normale donc vont dans la même direction.
  • pour un mesh non lissé, les sommets adjacents partagent leur normale avec celle de la face donc cela donne que chaque face se déplace selon une direction différente, d'où l'espace qui se crée entre les faces.
Enlève le displace et vérifie que tout soit lissé, si ce n'est pas le cas, tu peux le définir dans les Import Settings de ton mesh.
"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

Assis
Messages : 14
Inscription : 12 Août 2019 19:26

Re: Espace visible à travers le maillage

Message par Assis » 25 Oct 2019 21:21

Merci pour vos réponses Alesk et Boubouk50.

Tout est bien lissé les modifieurs étaient bien appliqués puisque le modèle est en polygones-bas.
Le code ne touche aux normales que sur les deux lignes que j'ai donné plus haut.

Finalement j'ai augmenté le Subdivision Surface et j'ai baissé la variable _Displacement et ça a l'air de marcher mais je trouve ça dommage qu'on ne puisse pas faire une bonne Tesselation avec peu de polygone (je ne veux pas dire minimaliste mais avec des modèles légers).
Enfin bref je vais m'arranger comme ça je trouverai surement des réponses en approfondissant mes connaissances sur le Shader.

Merci bien. :ange: :merci: :ange:

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

Re: [RÉSOLU] Espace visible à travers le maillage

Message par Alesk » 25 Oct 2019 22:26

Non, ça ne va pas.

La tesselation est justement là pour ajouter du détail en subdivisant des objets en low poly, donc tu n'a pas à ajouter des subdivisions sur le mesh d'origine ni à baisser ta valeur de displacement pour que ça "fonctionne".

Ton problème n'est pas réglé.

Regarde ici, il y a peut-être de quoi répondre à ton problème initial

https://answers.unity.com/questions/445 ... n-gap.html

Ici aussi, de la doc sur ce problème :
https://developer.nvidia.com/sites/defa ... Cracks.pdf

Assis
Messages : 14
Inscription : 12 Août 2019 19:26

Re: [RÉSOLU] Espace visible à travers le maillage

Message par Assis » 26 Oct 2019 17:27

Merci de ta réponse Alesk, je m'excuse j'ai mal fait mes recherches j'aurais dû utiliser le mot-clef tesselation j'aurais trouvé tout de suite.

J'ai trouvé la réponse dans le premier lien:
Il faut aller dans les "import settings" (Dans la fenetre Inspector) du modèle 3d:
.Model
.Mettre "Normals" sur "Calculate"
.Mettre Tangents sur Calculate
.Vérifier que "Smoothing Angle" > 0

Dans le lien vers la conférence GDC sur la Tesselation il est dit que ce problème vient de données contraires entre les normales et les UVs.

Et voilà normalement le problème est réglé.

Merci beaucoup Alesk. :merci:

Répondre

Revenir vers « les Shaders »