Affichage du z-buffer - C++ - Programmation
Marsh Posté le 13-09-2023 à 14:03:29
Tu peux essayer de jouer avec le depth range : https://registry.khronos.org/OpenGL [...] ange.xhtml
Marsh Posté le 18-09-2023 à 10:39:01
https://community.khronos.org/t/gl-fragcoord-z/54092/14
Mais oui la distribution de la précision n'est pas linéaire.
(Viendra plus tard la thématique du rendu principal en Reversed-Z avec un Depth buffer en FP32 )
Marsh Posté le 04-09-2023 à 22:54:56
Bonjour, je suis en train d'implémenter les shadow map en ce moment dans mon moteur opengl, j'ai créé un FBO pour la stocker et je fais ensuite une premiere passe de rendu dans ce buffer avant de faire le rendu de ma scene avec mon shader habituel (je l'ai appelé perPixelLighting). Je n'ai pas encore implémenté l'utilisation de cette map dans perPixelLighting mais dans l'optique de vérifier qu'elle a été rendue correctement je voulais d'abord l'afficher dans un coin de l'écran, j'ai donc
remplacé la matrice de la light par celle de la caméra, implémenté un shader pour afficher une simple texture et j'ai remplacé la texture par un render buffer pour pouvoir l'afficher à l'écran (j'ai essayé d'afficher la depth map dans la texture mais ca n'affiche rien, la fenetre reste noire). Voici le résumé de mon code :
Je ne met pas le shader pour afficher le buffer à l'écran mais il fonctionne, je l'ai testé en passant par un shader classique d'éclairage et la scene s'affiche bien dans le bord de mon écran.
Par contre quand j'utilise à la place mon shader de shadow map ma scene s'affiche tout en blanc, quelle que soit la distance de la caméra aux objets. Je me suis dis que le z devait etre trop important et qu'il fallait peut-etre le normaliser, j'ai donc fait un test en le divisant par deux mais ma scene est alors toute grise.
J'ai ensuite fait ces modifications pour faire des tests :
et les objets de la scene sont tous en rouge, les pixels ne deviennent verts que lorsqu'ils sont tres proches de la camera, puis quand je me rapproche d'avantage ils deviennent bleus, puis jaunes etc. Du coup ca signifie que quasiment tous les fragments de ma scene ont un z compris entre 0.99 et 1, est-ce que c'est normal ? J'ai confirmé ca en modifiant le shader d'origine comme ceci :
Mes objets sont encore une fois tous gris mais quand je les rapproche tres pres de la caméra ils deviennent de plus en plus foncés. En revanche quand je les éloigne ils restent gris jusqu'au bout, meme quand je les éloigne à la limite de mon far. Est-ce que leur z ne devrait pas etre tres proche de 1 à ce moment là, et donc les pixels devenir blanc ?
Le code que j'utilise pour initialiser le z buffer et la matrice de projection fonctionne correctement puisque c'est ce que j'utilise pour faire le rendu de ma scene et elle s'affiche correctement, je n'ai pas de probleme de précision. Je pensais avoir compris le principe du z buffer mais là je me pose des questions, est-ce que quelqu'un pourrait m'expliquer ce qui ne marche pas ici ?