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

    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 :
    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 :
    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 : 26
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : septembre 2008
    Messages : 108
    Points : 73
    Points
    73

    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é Sénior

    Homme Profil pro Emmanuel Deloget
    Développeur informatique
    Inscrit en
    septembre 2007
    Messages
    1 891
    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 891
    Points : 4 616
    Points
    4 616

    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.

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
  •