IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XNA/Monogame Discussion :

Mix de 2 textures (non voulu)


Sujet :

XNA/Monogame

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 22
    Points : 12
    Points
    12
    Par défaut Mix de 2 textures (non voulu)
    Bonjour,
    me revoila avec un nouveau bug graphique ...
    En fait, je suis sur un prototype de simulation de voile. J'ai le rendu de ma carte, une skybox et tout ce qui va avec. Maintenant, j'aurais voulu rajouter un plan avec une eau assez jolie. J'ai pour cela utilisé une classe créé par RandomChaos (que vous pouvez admirer ici: http://xna-uk.net/blogs/randomchaos/...-ocean-ii.aspx )
    J'ai donc reussi a l'integrer quelques pixels au dessus de mon terrain. Seulement, me voici maintenant confronte a un probleme: des que j'eloigne la camera, il y a une sorte de scintillement et la texture du terrain situé sous l'eau est visible par intermittence ...
    Quelqu'un saurait d'ou le probleme pourrait venir ? Je commence a etre a court d'idée :p

    screenshot

  2. #2
    Membre régulier

    Profil pro
    Inscrit en
    Juin 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 92
    Points : 115
    Points
    115
    Par défaut
    Sur ton screenshoot, le scintillement c'est les taches bleurs clairs un peu hachurés ?
    Le scintillement se fait juste pendant que tu éloignes la caméra ?
    une fois celle-ci est éloigné et qu'elle ne bouge plus, ça ne scintille plus ?

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Le terrain et l'eau sont séparés de quelle distance ? Tu as quelles valeurs pour ton near plane et ton far plane ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Oui, ce sont les taches claires hachurées (la texture du bas a de la transparence ... me sans celle ci, le probleme se produit)
    Le scintillement se fait perpetuellement avec une camera fixe ou non.
    Le terrain et l'eau sont séparés d'une distance de 50 pixels. J'ai essayé de les eloigner de plus, mais au final, le probleme revient toujours.
    Mon near plane a comme valeur 1.0f et mon far plane 10000.0f

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ca a l'air bon, mais essaye de réduire le far plane à 1000 pour voir ?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Toujours le meme probleme.
    Par contre, je me suis trompe concernant l'immobilite de la caméra.
    En fait, si la caméra reste immobile, le scintillement continue pendant quelques secondes avant de "s'immobiliser". C'est a dire que le mix est toujours present mais ne change plus.
    Serait ce possible que ce soit un probleme de Draw() trop long ? Mettons qu'entre deux draw, je n'ai pas le temps de finir de dessiner. Se pourrait'il que le second interfere avec le premier ? Et dans ce cas la, comment regler le probleme ?

    Edit: Bon, j'ai teste avec une autre "eau" ... meme probleme -___-

    Edit 2: Bon, j'ai mis le minimum d'elements et toujours le meme probleme, donc, a priori, c'est pas un probleme de Draw() ... d'autant plus que ca ramerais si jamais ca avait ete le cas

  7. #7
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par Laurent Gomila Voir le message
    Ca a l'air bon, mais essaye de réduire le far plane à 1000 pour voir ?
    Je n'aurais pas dit que c'était bon. En fait, je crois que tu l'expliques assez bien toi même
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  8. #8
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par Aran-Galad Voir le message
    Toujours le meme probleme.
    Par contre, je me suis trompe concernant l'immobilite de la caméra.
    En fait, si la caméra reste immobile, le scintillement continue pendant quelques secondes avant de "s'immobiliser". C'est a dire que le mix est toujours present mais ne change plus.
    Serait ce possible que ce soit un probleme de Draw() trop long ? Mettons qu'entre deux draw, je n'ai pas le temps de finir de dessiner. Se pourrait'il que le second interfere avec le premier ? Et dans ce cas la, comment regler le probleme ?

    Edit: Bon, j'ai teste avec une autre "eau" ... meme probleme -___-

    Edit 2: Bon, j'ai mis le minimum d'elements et toujours le meme probleme, donc, a priori, c'est pas un probleme de Draw() ... d'autant plus que ca ramerais si jamais ca avait ete le cas
    Non, ce n'est pas un problème de Draw(). Le problème que tu as porte le doux nom de z-fighting. Son orgine se trouve dans le ration zfar/znear, qui est trop élevé. Si ta scène est très éloignée de la caméra, n'hésite pas à augmenter znear de manière à réduire le phénomène. Un ratio environ égal à 100 devrait te permettre de résoudre le problème. Si tu ne peux pas te permettre ça, alors il te faudra dessiner ta scene en plusieurs passes. La première passe te permet de dessiner les objets éloignés avec un znear élevé. La seconde te permet de dessiner les objets proches avec un zfar plus petit.

    Exemple:
    1) znear=100 et zfar=10000 - rendu des objets dans la zone [100,10000]
    2) znear=1, zfar=100 - rendu des objets dans la zone [1,100]

    A noter que tu peux faire autant de passe que tu veux. Seulement, tu dois les faire en back-to-front, et vider le z-buffer entre chaque passe.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  9. #9
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par Aran-Galad Voir le message
    J'ai donc reussi a l'integrer quelques pixels au dessus de mon terrain. Seulement, me voici maintenant confronte a un probleme: des que j'eloigne la camera, il y a une sorte de scintillement et la texture du terrain situé sous l'eau est visible par intermittence ...
    Quelqu'un saurait d'ou le probleme pourrait venir ? Je commence a etre a court d'idée :p
    Problème général des surfaces quasi coplanaires.

    En effet le Z buffer variant par valeurs discretes (si tu traces la valeur stockée dans le Z buffer en fonction de la distance ce n'est pas une courbe continue mais une succession de paliers), la superposition de deux plans va faire que les paliers vont se mélanger mais ne seront pas coordonnés. Ajouter un "biais" de quelques "pixels" comme tu le fais a probablement un effet positif, mais ce biais a un problème s'il est dans une direction orthogonale à la variation de Z. C'est ce qui arrive si tu observes les deux plans a l'horizontal plutôt que de face.

    En fait ton problème a une solution un peu moins simple, si tu sais à quel endroit se trouve l'eau, tu peux modifier ta géométrie pour que le terrain et l'eau ne se superposent pas. Tu traces d'abord la partie occupée par l'eau, ensuite la partie occupée par le terrain (ou vice et versa). Comme ils ne se superposent pas, le risque de z-fighting est éliminé. Le problème c'est évidemment que cela nécessite de retrianguler le terrain (problème si le niveau de l'eau est dynamique).

    Pour le problème plus général des decals (tracé d'un triangle sur un autre quasi coplanaire), l'API direct3d9 propose une méthode appelée "depth bias". Depth bias va ajouter un "biais" mais cette fois garanti d'être dans la direction positive (ou négative) du ZBuffer. Ainsi avec ce biais, une surface tracé avec le biais a statistiquement plus de chance d'être déterminée en "avant" de l'autre surface.
    depth bias. Un des caveats (avertissement) est que le biais varie avec l'angle que fait la surface avec la direction du ZBuffer (variable slopescaledepthbias), ce qui diminue en pratique la résolution du ZBuffer et augmente la possibilité de corruption à d'autres endroits.
    Aussi si tu traces le terrain ET l'eau sur tout l'écran et repose sur le ZBuffer pour trier l'un et l'autre, le depth bias va changer la position de la frontière entre les deux (faisant apparaitre de l'eau là où tu n'avais pas forcément prévu d'en voir) et donc tu te retrouves à devoir traiter le problème autrement, par exemple avec la retriangulation du terrain cf ci dessus.

    LeGreg

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    J'ai augmente mon nearplane et, effectivement, le problème a disparu.
    Merci infiniment ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [OpenGL/GLSL] Texture - Transparence non voulu
    Par AuraHxC dans le forum OpenGL
    Réponses: 19
    Dernier message: 25/01/2010, 16h42
  2. Pb Firefox + pb fermeture Windows non voulue
    Par trotters213 dans le forum Firefox
    Réponses: 9
    Dernier message: 13/06/2005, 16h16
  3. [CSS][IE >= 5.5] Transparence non voulue !
    Par pimousse76 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 12/05/2005, 16h06
  4. probleme d'espace non voulu entre 2 bloc
    Par piff62 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 12/04/2005, 16h07
  5. Texture non rectangulaire
    Par GoldenEye dans le forum OpenGL
    Réponses: 9
    Dernier message: 06/10/2004, 16h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo