Précédent   Forum du club des développeurs et IT Pro > Applications > Développement 2D, 3D et Jeux > Moteurs 3D
Moteurs 3D Forum d'entraide sur les moteurs 3D (conception d'un moteur, Ogre, Irrlicht...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 17/08/2011, 09h56   #1
zenux
Membre régulier
 
Inscription : février 2006
Messages : 336
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 336
Points : 79
Points : 79
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.
zenux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 11h48   #2
math_lab
Membre chevronné
 
Homme
Chercheur en informatique
Inscription : avril 2008
Messages : 328
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Chercheur en informatique

Informations forums :
Inscription : avril 2008
Messages : 328
Points : 620
Points : 620
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.
math_lab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 07h10   #3
zenux
Membre régulier
 
Inscription : février 2006
Messages : 336
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 336
Points : 79
Points : 79
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.
zenux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 09h04   #4
Le Kamikaze
Inactif
 
Homme
Inscription : août 2011
Messages : 30
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 30
Points : 6
Points : 6
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
Le Kamikaze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 14h34   #5
zenux
Membre régulier
 
Inscription : février 2006
Messages : 336
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 336
Points : 79
Points : 79
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.
zenux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 17h15   #6
math_lab
Membre chevronné
 
Homme
Chercheur en informatique
Inscription : avril 2008
Messages : 328
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Chercheur en informatique

Informations forums :
Inscription : avril 2008
Messages : 328
Points : 620
Points : 620
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.
math_lab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 22h46   #7
zenux
Membre régulier
 
Inscription : février 2006
Messages : 336
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 336
Points : 79
Points : 79
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.
zenux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 13h35   #8
Emmanuel Deloget
Expert Confirmé Sénior
 
Homme Emmanuel Deloget
Développeur informatique
Inscription : septembre 2007
Messages : 1 826
Détails du profil
Informations personnelles :
Nom : Homme Emmanuel Deloget
Âge : 37
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 826
Points : 4 381
Points : 4 381
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.
Emmanuel Deloget est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2011, 22h50   #9
Le Kamikaze
Inactif
 
Homme
Inscription : août 2011
Messages : 30
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 30
Points : 6
Points : 6
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
Le Kamikaze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2011, 13h06   #10
Emmanuel Deloget
Expert Confirmé Sénior
 
Homme Emmanuel Deloget
Développeur informatique
Inscription : septembre 2007
Messages : 1 826
Détails du profil
Informations personnelles :
Nom : Homme Emmanuel Deloget
Âge : 37
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 826
Points : 4 381
Points : 4 381
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).

Citation:
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.
Emmanuel Deloget est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 23h42   #11
Le Kamikaze
Inactif
 
Homme
Inscription : août 2011
Messages : 30
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 30
Points : 6
Points : 6
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
Le Kamikaze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 16h12   #12
lasouze
Invité de passage
 
Homme
Développeur Web
Inscription : 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
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
lasouze est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 02h32.


 
 
 
 
Partenaires

Hébergement Web