|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Nicolas TreiberEtudiant en Intelligence Numérique Inscription : mars 2007 Messages : 26 ![]() |
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. |
|
|
00
|
|
|
#2 |
![]() ![]() ![]() ![]() Alexandre LaurentIngénieur développement logiciels Inscription : mai 2008 Messages : 10 467 ![]() |
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. |
|
00
|
|
|
#3 |
|
Invité régulier
![]() Nicolas TreiberEtudiant en Intelligence Numérique Inscription : mars 2007 Messages : 26 ![]() |
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. |
|
|
00
|
|
|
#4 |
![]() ![]() ![]() ![]() Alexandre LaurentIngénieur développement logiciels Inscription : mai 2008 Messages : 10 467 ![]() |
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. |
|
00
|
|
|
#5 |
|
Invité régulier
![]() Nicolas TreiberEtudiant en Intelligence Numérique Inscription : mars 2007 Messages : 26 ![]() |
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... |
|
|
00
|
|
|
#6 | |
|
Membre Expert
![]() ![]() |
Citation:
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 |
|
|
00
|
|
|
#7 | |
|
Membre chevronné
![]() Développeur de jeux vidéo Inscription : février 2006 Messages : 451 ![]() |
Citation:
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 ! |
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com