Partager via


Mémoires tampons de profondeurs

Une mémoire tampon de profondeur, ou z-buffer, stocke les informations de profondeur pour contrôler les zones de polygones affichées plutôt que masquées par la vue.

Présentation

Une mémoire tampon de profondeur, souvent appelée mémoire tampon z ou w-buffer, est une propriété de l’appareil qui stocke les informations de profondeur à utiliser par Direct3D. Lorsque Direct3D restitue une scène à une surface cible, elle peut utiliser la mémoire dans une surface de mémoire tampon de profondeur associée en tant qu’espace de travail pour déterminer comment les pixels des polygones ratérisés entrent l’un l’autre. Direct3D utilise une surface Direct3D hors écran comme cible dans laquelle les valeurs de couleur finales sont écrites. La surface de mémoire tampon de profondeur associée à la surface cible de rendu est utilisée pour stocker les informations de profondeur qui indiquent à Direct3D la profondeur de chaque pixel visible dans la scène.

Lorsqu’une scène est ratérisée avec la mise en mémoire tampon de profondeur activée, chaque point de la surface de rendu est testé. Les valeurs de la mémoire tampon de profondeur peuvent être la coordonnée z d’un point ou sa coordonnée w homogène , à partir de l’emplacement du point (x,y,z,w) dans l’espace de projection. Une mémoire tampon de profondeur qui utilise des valeurs z est souvent appelée mémoire tampon z, et celle qui utilise des valeurs w est appelée mémoire tampon w. Chaque type de mémoire tampon de profondeur présente des avantages et des inconvénients, qui sont abordés plus loin.

Au début du test, la valeur de profondeur dans la mémoire tampon de profondeur est définie sur la plus grande valeur possible pour la scène. La valeur de couleur sur l’aire de rendu est définie sur la valeur de couleur d’arrière-plan ou la valeur de couleur de la texture d’arrière-plan à ce stade. Chaque polygone de la scène est testé pour voir s’il croise la coordonnée actuelle (x,y) sur la surface de rendu.

Si elle se croise, la valeur de profondeur , qui sera la coordonnée z dans une mémoire tampon z, et la coordonnée w dans une mémoire tampon w - au point actuel est testée pour voir s’il est inférieur à la valeur de profondeur stockée dans la mémoire tampon de profondeur. Si la profondeur de la valeur du polygone est plus petite, elle est stockée dans la mémoire tampon de profondeur et la valeur de couleur du polygone est écrite au point actuel sur la surface de rendu. Si la valeur de profondeur du polygone à ce stade est supérieure, le polygone suivant de la liste est testé. Ce processus est illustré dans le diagramme suivant.

diagramme des valeurs de profondeur de test

Techniques de mise en mémoire tampon

Bien que la plupart des applications n’utilisent pas cette fonctionnalité, vous pouvez modifier la comparaison que Direct3D utilise pour déterminer les valeurs placées dans la mémoire tampon de profondeur et par la suite la surface de la cible de rendu. Sur certains matériels, la modification de la fonction de comparaison peut désactiver les tests z hiérarchiques.

Presque tous les accélérateurs sur le marché prennent en charge la mise en mémoire tampon z, ce qui rend les tampons z le type de mémoire tampon de profondeur le plus courant aujourd’hui. Toutefois, les tampons z omniprésents présentent leurs inconvénients. En raison des mathématiques impliquées, les valeurs z générées dans une mémoire tampon z ont tendance à ne pas être distribuées uniformément sur la plage de mémoires tampons z (généralement 0,0 à 1,0, inclus).

Plus précisément, le rapport entre les plans de découpage lointains et proches affecte fortement la répartition des valeurs z inégales. À l’aide d’une distance de plan lointain jusqu’à un rapport de distance proche de 100, 90 % de la plage de mémoires tampons de profondeur est dépensée sur la première plage de profondeur de 10 % de la plage de profondeur de la scène. Les applications classiques pour le divertissement ou les simulations visuelles avec des scènes extérieures nécessitent souvent des ratios de plan/plan proche de n’importe où entre 1 000 et 10 000. À un ratio de 1 000, 98 % de la plage sont dépensés sur les 2 premiers pour cent de la plage de profondeur, et la distribution devient pire avec des ratios plus élevés. Cela peut entraîner des artefacts de surface masqués dans des objets distants, en particulier lors de l’utilisation de mémoires tampons de profondeur 16 bits, la profondeur de bits la plus couramment prise en charge.

Une mémoire tampon de profondeur basée sur w, d’autre part, est souvent plus uniformément distribuée entre les plans de clip proche et lointain qu’une mémoire tampon z. Le principal avantage est que le ratio des distances pour les plans de découpage lointains et proches n’est plus un problème. Cela permet aux applications de prendre en charge de grandes plages maximales, tout en obtenant une mémoire tampon de profondeur relativement précise à proximité du point oculaire. Une mémoire tampon de profondeur basée sur w n’est pas parfaite et peut parfois exposer des artefacts de surface masqués pour les objets proches. Un autre inconvénient de l’approche w-buffered est lié à la prise en charge matérielle : w-buffering n’est pas pris en charge aussi largement dans le matériel que la mise en mémoire tampon z.

L’utilisation d’une mémoire tampon z nécessite une surcharge pendant le rendu. Différentes techniques peuvent être utilisées pour optimiser le rendu lors de l’utilisation de tampons z. Les applications peuvent augmenter les performances lors de l’utilisation de z-buffering et de texturing en veillant à ce que les scènes soient rendues de l’avant à l’arrière. Les primitives en mémoire tampon z texture sont prétestées par rapport à la mémoire tampon z sur une ligne d’analyse. Si une ligne d’analyse est masquée par un polygone précédemment rendu, le système le rejette rapidement et efficacement. La mise en mémoire tampon Z peut améliorer les performances, mais la technique est la plus utile lorsqu’une scène dessine les mêmes pixels plusieurs fois. Il est difficile de calculer exactement, mais vous pouvez souvent effectuer une approximation étroite. Si les mêmes pixels sont dessinés moins de deux fois, vous pouvez obtenir les meilleures performances en activant la mise en mémoire tampon z et en rendant la scène de retour en arrière vers l’avant.

L’interprétation réelle d’une valeur de profondeur est spécifique au renderer.

Mémoires tampons de profondeurs et de gabarits