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.
Partager