Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Invité régulier
    Femme Profil pro Nicolas Treiber
    Etudiant en Intelligence Numérique
    Inscrit en
    mars 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Nom : Femme Nicolas Treiber
    Âge : 24
    Localisation : France

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

    Informations forums :
    Inscription : mars 2007
    Messages : 26
    Points : 7
    Points
    7

    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 Alexandre Laurent
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    14 385
    Détails du profil
    Informations personnelles :
    Nom : Homme Alexandre Laurent
    Localisation : France

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

    Informations forums :
    Inscription : mai 2008
    Messages : 14 385
    Points : 67 514
    Points
    67 514

    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
    La rubrique a aussi un blog !

    Ma page sur DVP
    Mon Portfolio

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

  3. #3
    Invité régulier
    Femme Profil pro Nicolas Treiber
    Etudiant en Intelligence Numérique
    Inscrit en
    mars 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Nom : Femme Nicolas Treiber
    Âge : 24
    Localisation : France

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

    Informations forums :
    Inscription : mars 2007
    Messages : 26
    Points : 7
    Points
    7

    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 Alexandre Laurent
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    14 385
    Détails du profil
    Informations personnelles :
    Nom : Homme Alexandre Laurent
    Localisation : France

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

    Informations forums :
    Inscription : mai 2008
    Messages : 14 385
    Points : 67 514
    Points
    67 514

    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
    La rubrique a aussi un blog !

    Ma page sur DVP
    Mon Portfolio

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

  5. #5
    Invité régulier
    Femme Profil pro Nicolas Treiber
    Etudiant en Intelligence Numérique
    Inscrit en
    mars 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Nom : Femme Nicolas Treiber
    Âge : 24
    Localisation : France

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

    Informations forums :
    Inscription : mars 2007
    Messages : 26
    Points : 7
    Points
    7

    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 Expert

    Profil pro
    Programmeur
    Inscrit en
    août 2002
    Messages
    1 054
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : août 2002
    Messages : 1 054
    Points : 1 626
    Points
    1 626

    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
    616
    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 : 616
    Points : 1 210
    Points
    1 210

    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 !

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
  •