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

Moteurs 3D Discussion :

Shadow mapping: ombre qui bouge


Sujet :

Moteurs 3D

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Points : 230
    Points
    230
    Par défaut Shadow mapping: ombre qui bouge
    Bonjour,

    J'ai développé les shadow maps dans mon petit moteur 3D en OpenGL.
    Tout se passe bien sauf que les bords de mes ombres bougent légèrements quand ma caméra bouge.
    Voici une image trouvé sur Internet qui représente bien le problème: http://i.msdn.microsoft.com/dynimg/IC340455.jpg

    J'ai lu plusieurs fois sur Internet que la solution à ce problème était de créer une matrice de translation afin de lire le bon pixel (valeur entière) sur la shadow map.
    J'ai donc implémenté ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Point4<float> anyPointOnShadowMap = getLightProjectionMatrix() * getLightViewMatrix() * Point4<float>(0.0, 0.0, -0.2, 1.0)) / 2.0f) + 0.5f;
    float texCoordX = (shadowMapSize * anyPointOnShadowMap.X);
    float texCoordY = (shadowMapSize * anyPointOnShadowMap.Y);
    float roundedTexCoordX = round(texCoordX);
    float roundedTexCoordY = round(texCoordY);
    float dx = roundedTexCoordX - texCoordX;
    float dy = roundedTexCoordY - texCoordY;
    dx /= (float)shadowMapSize;
    dy /= (float)shadowMapSize;
     
    Matrix4<float> mShadowOffset;
    mShadowOffset.buildTranslation(dx, dy, 0.0);
    Dans mon shader, je lis ma shadow map avec ces coordonnées:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vec4 shadowCoord = ((mLightProjectionView * position) / 2.0) + 0.5;
    shadowCoord = shadowCoord * mShadowOffset;
    Problème: ça ne fonctionne pas. Mes ombre s'affiche toujours presque comme avant (petit différence du à la matrice mShadowOffset mais ça ne règle pas du tout le problème.)
    Une idée ? Peut-on utiliser n'importe quel point de départ comme je le fais (0.0, 0.0, -0.2, 1.0) ?

    Merci d'avance.

  2. #2
    Membre régulier Avatar de lightbulb
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 108
    Points : 96
    Points
    96
    Par défaut
    C'est un problème récurrent en ce qui concerne les shadow maps, tu as plusieurs types de problèmes comme les shadow acne, le peter panning et dans ton cas le shadow aliasing.

    Ton problème est du à une différence de taille de texel lorsque tu fais la projection de la light view à la camera view.

    Pour régler le problème de nombreux algos on étés inventés comme le PCF (percentage closer filtering) qui font un echantillonage des texel proches et en font la moyenne pour smoother les edges.

    Augmenter la résolution de la shadow map contribue également à régler le problème mais il y a diminution des performances, ensuite c'est à toi de voir !

  3. #3
    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 lightbulb Voir le message
    C'est un problème récurrent en ce qui concerne les shadow maps, tu as plusieurs types de problèmes comme les shadow acne, le peter panning et dans ton cas le shadow aliasing.

    Ton problème est du à une différence de taille de texel lorsque tu fais la projection de la light view à la camera view.

    Pour régler le problème de nombreux algos on étés inventés comme le PCF (percentage closer filtering) qui font un echantillonage des texel proches et en font la moyenne pour smoother les edges.

    Augmenter la résolution de la shadow map contribue également à régler le problème mais il y a diminution des performances, ensuite c'est à toi de voir !
    Et après, il y a d'autres algorithmes basés sur les shadow map qui ont pour but de réduire les artefacts - perspective shadow map, adaptive shadow maps, ... La litterature est très importante sur le sujet, je te conseille donc de t'y reporter.
    [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.

Discussions similaires

  1. framework pour ombre portee shadow mapping
    Par mapmip dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 30/07/2014, 13h07
  2. google maps api v2 et image qui bouge
    Par Batos dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 03/07/2013, 06h12
  3. Shadow Map - Problème d'Ombres Projetées
    Par 686insomnia686 dans le forum DirectX
    Réponses: 11
    Dernier message: 22/08/2012, 15h57
  4. [Shadow mapping] Ombre noir
    Par Gonath dans le forum OpenGL
    Réponses: 8
    Dernier message: 20/07/2012, 21h45
  5. [Timer+Bitmap]Bitmap qui bouge?
    Par thief dans le forum MFC
    Réponses: 6
    Dernier message: 01/09/2004, 18h45

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