Je suis en train de lire un tutoriel OpenGL impressionnant . C'est vraiment génial, croyez-moi. Le sujet que j'aborde actuellement est le Z-buffer. En plus d'expliquer ce dont il s'agit, l'auteur mentionne que nous pouvons effectuer des tests de profondeur personnalisés, tels que GL_LESS, GL_ALWAYS, etc. Il explique également que la signification réelle des valeurs de profondeur (ce qui est supérieur et ce qui ne l'est pas) peut également être personnalisée. Je comprends jusqu'à présent. Et puis l'auteur dit quelque chose d'incroyable :
La plage zNear peut être supérieure à la plage zFar ; si c'est le cas, les valeurs de l'espace de la fenêtre sont les suivantes valeurs de l'espace de la fenêtre seront inversées, en termes de ce qui constitue le plus proche ou le plus éloigné de l'observateur.
On a dit plus haut que la valeur Z de 0 dans l'espace fenêtre est la plus proche et la plus proche de la valeur Z dans l'espace fenêtre. 1 est la plus éloignée. Cependant, si les valeurs Z de notre espace de clip étaient annulées, la profondeur de 1 serait la plus proche de la vue et la profondeur de 0 serait la plus éloignée. profondeur de 1 serait la plus proche de la vue et celle de 0 serait la plus éloignée. la plus éloignée. Pourtant, si nous inversons la direction du test de profondeur (GL_LESS vers GL_GREATER, etc.), nous obtenons exactement le même résultat. Il ne s'agit donc que d'une convention. En effet, inverser le signe de Z et le test de profondeur était autrefois une optimisation vitale des performances pour de nombreux jeux.
Si je comprends bien, du point de vue des performances, inverser le signe de Z et le test de profondeur n'est rien d'autre que changer un <
par rapport à un >
comparaison. Donc, si je comprends bien et que l'auteur ne ment pas ou n'invente pas des choses, alors changer <
a >
utilisé pour être une optimisation vitale pour de nombreux jeux.
Est-ce que l'auteur invente des choses, est-ce que je comprends mal quelque chose, ou est-ce que c'est vraiment le cas qu'une fois <
était plus lent ( vitalement (comme le dit l'auteur) que >
?
Merci de clarifier cette question assez curieuse !
Avertissement : je suis pleinement conscient que la complexité des algorithmes est la source principale des optimisations. De plus, je soupçonne qu'aujourd'hui cela ne ferait aucune différence et je ne demande pas cela pour optimiser quoi que ce soit. Je suis juste extrêmement, douloureusement, peut-être prohibitivement curieux.
6 votes
Le lien vers ce tutoriel semble avoir disparu (récemment) :(
0 votes
@TZHX : Comme la réponse acceptée est rédigée par l'auteur du tutoriel, nous avons l'espoir de la retrouver. Voir mon dernier commentaire à sa réponse :)
0 votes
(a < b) est identique à (b > a), il n'est donc absolument pas nécessaire d'implémenter les deux opérations de comparaison dans le matériel. La différence de performance est le résultat de ce qui se passe à la suite de l'opération de comparaison. La route est longue et sinueuse pour expliquer tous les effets secondaires, mais voici quelques indications. Les jeux avaient l'habitude de remplir le tampon de profondeur pour éviter un traitement plus coûteux des fragments qui échouaient au test de profondeur. Quake avait l'habitude de diviser la plage de profondeur en deux moitiés pour éviter de vider le tampon d'image parce que le jeu remplissait toujours chaque pixel de l'écran, etc.
2 votes
@Fons on dirait que le lien est mort, encore une fois :(
0 votes
Voici le version archivée du tutorial OpenGL référencé . Je n'arrive pas à trouver l'extrait cité, il a peut-être été supprimé.