Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 12 sur 12
  1. #1
    Membre régulier
    Inscrit en
    février 2006
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : février 2006
    Messages : 350
    Points : 81
    Points
    81

    Par défaut Shadow mapping: artifacts

    Bonjour,

    Je viens d'implémenter les shadow mapping dans mon mini moteur 3D. J'ai des ombres qui s'affichent mais elle ne sont pas du tout belles

    Voici un aperçu: ici.

    1. L'ombre sur le sol semble très pixelisé et je ne comprends vraiment pas pourquoi:
    ** La précision de mes 2 depth buffer est de 32 bits (GL_DEPTH_COMPONENT32).
    ** La taille de mon depth buffer de shadow est de la même taille que ma fenêtre.
    ** J'ai tenté d'avoir un depth buffer super précis en mettant un near plan à 1.0f et le far plan à 100.0f au lieu de 0.01f/1000.0f et je ne vois aucune différence.

    2. Je n'arrive pas à obtenir un self-shadowing correct. Peux-être que le premier problème en est la cause ?

    Biensur, je peux vous montrer mon code source mais je ne sais pas quel partie car je ne sais vraiment pas d'où viens l'erreur !

    Merci d'avance.

  2. #2
    Membre chevronné
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    avril 2008
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : avril 2008
    Messages : 359
    Points : 646
    Points
    646

    Par défaut

    Alors tu as 2 problèmes:
    - Ton ombre est pixelisée tout simplement parce que tu ne fais rien pour la depixeliser. La résolution et les paramètres de la camera n'ont rien a voir avec ça. Tu devrais regarder du coté du Percentage Closer Filtering (PCF) ou Variance Shadow Map pour régler ce problème.
    - A cause du manque de précision des floats, il y a toujours quelques inexactitudes entre la distance stockée dans la shadowmap et la distance entre la surface shadée et la lumière (ça donne ce motif crado d'alternance ombre/lumière). La, il y a pas de formule miracle, mais la solution est de soustraire une petite constante (genre 0.001) a la valeur lue dans la shadowmap.

  3. #3
    Membre régulier
    Inscrit en
    février 2006
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : février 2006
    Messages : 350
    Points : 81
    Points
    81

    Par défaut

    Merci pour votre réponse mais j'ai quand même un doute:

    Je viens de regarder en vitesse le fonctionnement du 'Percentage Closer Filtering'. Si j'ai bien compris, on regarde les pixels autour de celui qui nous interesse afin de mieux déterminer si le pixel est totalement, partiellement ou pas du tout dans l'ombre.

    Dans la plus part des tutorials, j'ai pu constater qu'ils se contentent souvent de 4 pixels pour déterminer la valeur d'un pixel. J'ai l'impression que cette techinque n'améliorera gère mes ombres. En effet, sur mon screenshot, je n'ai pas de l'aliasing de quelques pixel mais c'est un énorme aliasing d'environ 30 à 50 pixels ! C'est énorme, non ?

    Merci d'avance.

  4. #4
    Inactif
    Homme Profil pro
    Inscrit en
    août 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : août 2011
    Messages : 30
    Points : 5
    Points
    5

    Par défaut

    si t'as un aliasing de 50 pixels c'est que dans ton truc 3d qui rend les ombres l'image est minuscule, et ensuite elle est zoomée à mort dans la texture

    fais toi un outil de debug qui permet de visualiser le rendu des ombres à l'echelle 1 pixel avant de la mapper en texture, ça t'aidera mieux à voir où tu as foiré tes calculs

  5. #5
    Membre régulier
    Inscrit en
    février 2006
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : février 2006
    Messages : 350
    Points : 81
    Points
    81

    Par défaut

    Merci pour votre réponse.

    Voici un nouveau screenshot: ici.
    En bas à droite du screenshot, on peut voir la shadow map.

    Dans ce cas, je suis d'accord qu'il y a un zoom entre la shadow map et l'affichage de l'ombre. Je peux donc comprendre qu'il y a de l'aliasing même si ça me parait bcp (mais possible, je n'ai pas fait de calcul précis pour le savoir).

    Si on compare mon screenshot à des jeux vidéo actuels, je suis très loin de leurs résultats.De plus dans les jeux actuels, ils ont des objects bcp plus petit que le miens (donc un plus gros zoom) avec une ombre sans aliasing !
    Comment font-ils alors ? Shadow map 2, 3 fois plus grand que la résolution de l'écran ? Percentage Closer Filtering sur 50 pixels ?

    Merci d'avance.

  6. #6
    Membre chevronné
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    avril 2008
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : avril 2008
    Messages : 359
    Points : 646
    Points
    646

    Par défaut

    Les shadow map sont en général énorme (1024*1024 me semble être le minimum), et il y en a souvent plusieurs de différente résolution qui sont combinées (regarde du coté des cascade shadow map: il y a une shadow map qui gère les objets proches de la camera, et d'autres pour les objets plus éloignés).
    Mais sinon, ton problème vient peut être des paramètres de filtering de la texture. Tu désactives bien tout ? Parce que si tu laisses le filtrage trilinéaire activé, forcement, ça va pas être joli. En tout cas, vu ton screen, je suis pas particulièrement choqué. Et je pense pas que tu puisses avoir beaucoup plus joli, même si ça venait bien d'un bug quelque part.

  7. #7
    Membre régulier
    Inscrit en
    février 2006
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : février 2006
    Messages : 350
    Points : 81
    Points
    81

    Par défaut

    Tous les textures filtering sont bien désactivé.

    Après quelques tests, je confirme que mon problème est dû au zoom entre la shadow map et l'ombre affichée. En effet, si je positionne ma caméra à la même place que ma source lumineuse, je ne vois (presque) plus d'aliasing.

    Je vais donc voir ce que je peux faire pour améliorer ce problème avec les soft shadow & cascade shadow map.

  8. #8
    Expert Confirmé Sénior

    Homme Profil pro Emmanuel Deloget
    Développeur informatique
    Inscrit en
    septembre 2007
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Nom : Homme Emmanuel Deloget
    Âge : 38
    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 894
    Points : 4 140
    Points
    4 140

    Par défaut

    Les shadow map sont connues pour souffrir de ce problème d'aliasing. Pour l'éviter, il faut utiliser des algorithmes plus pointus (fort heureusement, c'est un domaine de recherche dynamique, et de nouveaux algorithmes de plus en plus pointus sortent régulièrement).

    Cf. http://en.wikipedia.org/wiki/Shadow_...mplementations pour plus d'infos.

    D'autres liens intéressants (tous en anglais):

    http://www.gamedev.net/page/resource...-shadows-r2193

    http://www.gamedev.net/page/resource...aliasing-r2376

    http://www.gamedev.net/topic/405955-...hadow-mapping/

    http://gamma.cs.unc.edu/LOGSM/

    http://www-sop.inria.fr/reves/Basili...ShadowMaps.pdf

    http://www.cs.harvard.edu/~sjg/paper...sis%5B1%5D.pdf
    [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
    Inactif
    Homme Profil pro
    Inscrit en
    août 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : août 2011
    Messages : 30
    Points : 5
    Points
    5

    Par défaut

    deloget > y'a pas besoin d'algo pointus pour obtenir quelque chose d'à moitié propre

    faut juste comprendre quelque chose à ce qu'on fait

    c'est pour ça que je lui dis de se faire un outil de debug qui affiche le truc à l'echelle 1 pixel avant de balancer quoi que ce soit dans une texture


    math_lab > "les shadow map sont en général énorme"... houlà mais c'est pas spécialement vrai du tout ça

    déjà quand on bosse proprement les shadowmap sont réparties sur plusieurs textures justement, afin de ne pas afficher une texture monstrueuse qui va planter les vieilles cartes vidéo

    ensuite, en ce qui concerne les ombres dynamiques, elles ne sont pas forcément rendues sur la shadowmap... ça c'est valable pour les moteurs qui recalculent l'intégralité de la shadowmap à chaque frame et c'est loin d'être aisé à faire proprement. pour les moteurs plus simples, les ombres dynamiques sont rendues sur des toutes petites textures dans le framebuffer

  10. #10
    Expert Confirmé Sénior

    Homme Profil pro Emmanuel Deloget
    Développeur informatique
    Inscrit en
    septembre 2007
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Nom : Homme Emmanuel Deloget
    Âge : 38
    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 894
    Points : 4 140
    Points
    4 140

    Par défaut

    Citation Envoyé par Le Kamikaze Voir le message
    deloget > y'a pas besoin d'algo pointus pour obtenir quelque chose d'à moitié propre

    faut juste comprendre quelque chose à ce qu'on fait
    Je sais, je sais (enfin, reste des cas ou des algos plus pointus sont quand même nécessaires).

    En effet, si je positionne ma caméra à la même place que ma source lumineuse, je ne vois (presque) plus d'aliasing.
    Tu devrais surtout ne plus voir d'ombre du tout
    [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.

  11. #11
    Inactif
    Homme Profil pro
    Inscrit en
    août 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : août 2011
    Messages : 30
    Points : 5
    Points
    5

    Par défaut

    Citation Envoyé par Emmanuel Deloget Voir le message
    Je sais, je sais (enfin, reste des cas ou des algos plus pointus sont quand même nécessaires).
    oui certes si tu veux un rendu ultra léché il faut des algos pointus... m'enfin si je me fie à la production de jeux vidéo actuelle, la plupart du temps on s'en passe fort bien ( ne serait-ce parce que ça bouffe du processeur et que le processeur est déjà à genoux parce qu'il a cinquante mille objets à gérer )

    y'a une tonne de moteurs de jeux qui ne se prennent pas le chou à antialiaser les ombres, le filtering de texture de la carte vidéo est suffisant pour lisser les pixels (on s'en fiche un peu en fait de lécher les ombres au pixel près)

    avant de rechercher un résultat pointu faut déjà réussir à avoir un résultat basique propre

    si zenux commençait par se faire un outil de debug qui trace dans un coin ce que fait la pseudo-camera qui rend les ombres, il y verrait déjà plus clair

    parce que y'aller comme ça en aveugle évidemment c'est casse binette

  12. #12
    Invité de passage
    Homme Profil pro
    Développeur Web
    Inscrit en
    décembre 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : décembre 2011
    Messages : 1
    Points : 1
    Points
    1

    Par défaut

    Déterrage de topic.

    Bonjour à tous,

    Voila, je réalise un petit jeux compatible Xbox360 et Windows, et j'ai de petit problèmes avec les ombres : l'aliasing.

    J'ai déjà utilise différentes techniques pour "minimiser" l'aliasing (PCF ou VSM ou autre blur), mais mon vrai problème c'est que le jeux doit pouvoir afficher les formes précises des ombres, elles ont de l'importance !

    Je me suis dis, c'est pas grave, on va voir d'autre solution, comme les cascaded shadom map, mais(je fais déjà du deferred et ça bouffe pas mal de cpu/gpu, alors sur des petites config ca rame à fond.

    L'autre solution que je pensais faire c'est le shadow silhouette map. Le problème de cette technique c'est qu'elle impose de faire du geometry shader, et comme je l'ai dis, petite config qui ne supporte que le shader 2.0, donc pas de géometry shader.

    J'en viens donc a ma vrai question :
    Parmis vous, y a - il quelqu'un qui a déjà implémenter l'algo shadow silhouette map avec du shader 2.0 ?

    Lasouze

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •