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

API graphiques Discussion :

Deferred Rendering et Shadow (XNA)


Sujet :

API graphiques

  1. #1
    Membre du Club
    Femme Profil pro
    Etudiant en Intelligence Numérique
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en Intelligence Numérique

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Points : 42
    Points
    42
    Par défaut Deferred Rendering et Shadow (XNA)
    Bonjour,

    Je travail sur un projet de moteur 3D en C# en me basant sur XNA.
    Mais je rencontre un problème de shaders pour l'éclairage et les ombres en me basant sur le deferred rendering, je recherche donc un programmeur qui pourrait m'aider à réaliser ce moteur de rendu (je n'ai pas posté ce message dans la section recrutement car je ne recherche pas quelqu'un pour travailler sur le projet lui-même mais seulement sur le moteur de rendu, mais rien n'empêche un modérateur de le mettre dans l'autre section s'il la juge plus appropriée).

    Cependant au cas où personne ne voudrait participer de cette manière je décrit tout de même le problème principal que je rencontre, quelqu'un pourra peut-être ainsi m'expliquer où je me trompe.

    J'ai tout d'abord commencé par créer l'effet du GBuffer avant d'obtenir dans 3 textures différentes la couleur de chaque pixel, la normale et la profondeur. Ensuite j'ai créer l'effet qui se charge de l'éclairage avec une lumière directionnel, jusque là pas de problème, je procède ainsi:

    - passage en paramètre de la direction de la lumière
    - je récupère la normale et la profondeur du pixel étudié
    - je calcul la luminosité en multipliant la couleur de la lumière par le scalaire de la normal

    jusque là, ça fonctionne sans problème.

    Le problème par contre vient des lumière Point Light. Comme la source émet des rayons dans tous les directions je me suis que je pourrait utiliser le même principe qu'avec la lumière directionnelle, sauf qu'il faudrait calcule la direction de la lumière pour chaque pixel. Pour cela je passe la position de la source à l'effet. Ensuite afin de calculer la direction de la lumière je voulais calculer la position du pixel dans l'espace et soustraire à celle-ci la position de la source. Hors pour obtenir la position du pixel à l'écran on multiplie les coordonnées du pixel dans l'espace par la matrice View*Projection. Il me semblait donc évident que si je multipliait les coordonnées du pixel (avec la profondeur contenu dans la texture Depth) à l'écran par l'inverse de la matrice View*Projection on devait retrouver la position recherché.
    Or, ça ne marche pas... La lumière se comporte bizarrement (on dirait que la source suit la camera alors que je transmet bien les coordonnées de la source et de celles de la caméra).

    Voila, si quelqu'un pouvait m'aider ou du moins m'éclairer je l'en remercie.

    Bonne journée.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 855
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 855
    Points : 218 551
    Points
    218 551
    Billets dans le blog
    118
    Par défaut
    Bonjour,

    Vos lumières ne seraient pas lié à la caméra, car dans le GBuffer où vous stocker la profondeur, cette profondeur corresponds à la distance point <-> caméra. Et que du coup si vous reculez, cela modifie la distance ?
    Sinon, ça serait cool d'avoir des images (une vidéo même) pour bien illustrer le problème, s'il vous plait.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre du Club
    Femme Profil pro
    Etudiant en Intelligence Numérique
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en Intelligence Numérique

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Points : 42
    Points
    42
    Par défaut
    Voici deux image pour illustrer le problème. Je rappel que la source est censée être un PointLight.


    Sur la première image on voit que toute la route (oui, ça ne se voit pas car je n'ai pas appliqué les textures mais c'est une route) et sombre. Or, premier problème, j'ai placé la source à la position du lampadaire, donc la route devrait être plus ou moins éclairée selon la direction de la lumière et la normale du plan... Ce qui n'ai pas le cas ici.


    Sur la seconde photo on remarque un autre problème. Comme la source n'a pas changé de position (c'est toujours le lampadaire) la luminosité de la route ne devrait pas changé en fonction de la position de la caméra, ce qui semble pourtant être le cas ici.

    Voila, j'espère que mon problème est maintenant un peu plus clair.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 855
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 855
    Points : 218 551
    Points
    218 551
    Billets dans le blog
    118
    Par défaut
    Quel tutoriel suivez vous pour le déferred shading ?
    Je dois dire, que je ne me rappelle pas complètement le faire. Habituellement, lorsque l'on arrive à la dernière étape, on applique juste une texture qui ajoutera de la couleurs aux pixels (car la texture permet de limiter les zones dessinées).
    Lorsque je faisais cette technique, je gardais trois buffers:
    - position des points (après avoir subit la MVP)
    - normales
    - couleurs

    Et c'est tout.
    J'avoue que votre histoire de profondeur peut être intéressant pour régler les problèmes de profondeurs, mais dans un premier cas, vous pouvez ne pas en avoir besoin.
    Le deuxième point que je me pose une question, c'est, est ce que la profondeur doit vraiment être calculé au niveau de la caméra. Je pense que oui, et d'ailleurs c'est plus simple, mais pour savoir s'il y a un objet qui est entre le pixel vu et la lampe, il faut faire un gros calcul matriciel (que je ne me rappelle plus).

    Donc, pour votre problème, je pense que vous devez commencer par stocker la position des pixels.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre du Club
    Femme Profil pro
    Etudiant en Intelligence Numérique
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en Intelligence Numérique

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Points : 42
    Points
    42
    Par défaut
    La tutoriel que j'ai suivi est le suivant:
    http://www.catalinzima.com/tutorials...dering-in-xna/

    Simplement j'ai modifié un peu la partie concernant le PointLight car il est écrit qu'il faut utiliser un Model sphérique pour le rendu, or normalement il suffirait d'utiliser la même méthode que pour la lumière directionnelle en modifiant la direction de la lumière (d'où nécessité de connaitre la position du pixel dans l'espace) mais ça n'a pas l'air de marcher...

  6. #6
    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 hinomi Voir le message
    Sur la seconde photo on remarque un autre problème. Comme la source n'a pas changé de position (c'est toujours le lampadaire) la luminosité de la route ne devrait pas changé en fonction de la position de la caméra, ce qui semble pourtant être le cas ici.
    Parce que tu as une composante spéculaire dans ton matériel ?

    Si tu n'as pas de composante spéculaire (uniquement du diffus ou lambertien), assure toi que la couleur finale de ton image ne fait pas intervenir ton point de vue (uniquement la direction de la lumière par rapport à la surface).

    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

  7. #7
    Membre expert

    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2006
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 1 031
    Points : 3 092
    Points
    3 092
    Par défaut
    Citation Envoyé par hinomi Voir le message
    Simplement j'ai modifié un peu la partie concernant le PointLight car il est écrit qu'il faut utiliser un Model sphérique pour le rendu, or normalement il suffirait d'utiliser la même méthode que pour la lumière directionnelle en modifiant la direction de la lumière (d'où nécessité de connaitre la position du pixel dans l'espace) mais ça n'a pas l'air de marcher...
    Euh le model sphérique n'est utilisé que pour optimiser en ne dessinant que dans la partie nécessaire.
    Pour le reste le calcul décrit par cette page :
    http://www.catalinzima.com/tutorials.../point-lights/
    Correspond exactement à ce que tu souhaites avec un test de distance entre la lumiere et le pixel !
    Suivez le développement de Chibis Bomba
    twitter : https://twitter.com/MoD_DiB
    DevBlog : http://moddib.blogspot.fr/

Discussions similaires

  1. Light pre-pass renderer + shadow map
    Par Shagrath dans le forum XNA/Monogame
    Réponses: 0
    Dernier message: 27/07/2011, 16h58
  2. Utilité du deferred rendering avec DirectX 10 ?
    Par Idrakis dans le forum Développement 2D, 3D et Jeux
    Réponses: 5
    Dernier message: 19/04/2009, 13h49
  3. [SQL] INITIALLY DEFERRED DEFERRABLE
    Par Boosters dans le forum Administration
    Réponses: 8
    Dernier message: 05/03/2004, 19h05
  4. Render to texture???
    Par sebh dans le forum OpenGL
    Réponses: 2
    Dernier message: 17/01/2004, 09h50

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