Précédent   Forum du club des développeurs et IT Pro > Applications > Développement 2D, 3D et Jeux > API graphiques
API graphiques Forum d'entraide sur les API et bibliothèques graphiques 2D et 3D
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 31/10/2011, 21h59   #1
hinomi
Invité régulier
 
Femme Nicolas Treiber
Etudiant en Intelligence Numérique
Inscription : mars 2007
Messages : 26
Détails du profil
Informations personnelles :
Nom : Femme Nicolas Treiber
Âge : 23
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.
hinomi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2011, 00h57   #2
LittleWhite
Responsable 2D/3D/Jeux


 
Avatar de LittleWhite
 
Homme Alexandre Laurent
Ingénieur développement logiciels
Inscription : mai 2008
Messages : 10 467
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 : 10 467
Points : 40 427
Points : 40 427
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.
LittleWhite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2011, 03h25   #3
hinomi
Invité régulier
 
Femme Nicolas Treiber
Etudiant en Intelligence Numérique
Inscription : mars 2007
Messages : 26
Détails du profil
Informations personnelles :
Nom : Femme Nicolas Treiber
Âge : 23
Localisation : France

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

Informations forums :
Inscription : mars 2007
Messages : 26
Points : 7
Points : 7
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.
hinomi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2011, 11h10   #4
LittleWhite
Responsable 2D/3D/Jeux


 
Avatar de LittleWhite
 
Homme Alexandre Laurent
Ingénieur développement logiciels
Inscription : mai 2008
Messages : 10 467
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 : 10 467
Points : 40 427
Points : 40 427
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.
LittleWhite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2011, 16h58   #5
hinomi
Invité régulier
 
Femme Nicolas Treiber
Etudiant en Intelligence Numérique
Inscription : mars 2007
Messages : 26
Détails du profil
Informations personnelles :
Nom : Femme Nicolas Treiber
Âge : 23
Localisation : France

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

Informations forums :
Inscription : mars 2007
Messages : 26
Points : 7
Points : 7
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...
hinomi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 23h03   #6
LeGreg
Membre Expert
 
Programmeur
Inscription : août 2002
Messages : 1 048
Détails du profil
Informations personnelles :
Localisation : Etats-Unis

Informations professionnelles :
Activité : Programmeur

Informations forums :
Inscription : août 2002
Messages : 1 048
Points : 1 578
Points : 1 578
Envoyer un message via ICQ à LeGreg
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
LeGreg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2011, 12h30   #7
MoDDiB
Membre chevronné
 
Homme
Développeur de jeux vidéo
Inscription : février 2006
Messages : 451
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 : 451
Points : 698
Points : 698
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 !
MoDDiB 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 23h42.


 
 
 
 
Partenaires

Hébergement Web