# Z-buffering

Un buffer de profunditat, també conegut com a buffer z, és un tipus de memòria intermèdia de dades que s'utilitza en gràfics per ordinador per representar la informació de profunditat d'objectes en l'espai 3D des d'una perspectiva particular. Els buffers de profunditat són una ajuda per representar una escena per assegurar-se que els polígons correctes oclueixen correctament altres polígons. El Z-buffering va ser descrit per primera vegada l'any 1974 per Wolfgang Straßer en la seva tesi doctoral sobre algorismes ràpids per a la representació d'objectes oclusos. Una solució similar per determinar polígons superposats és l'algorisme del pintor, que és capaç de manejar elements d'escena no opacs, encara que a costa de l'eficiència i els resultats incorrectes.
En una canalització de renderització en 3D, quan es projecta un objecte a la pantalla, la profunditat (valor z) d'un fragment generat a la imatge de la pantalla projectada es compara amb el valor ja emmagatzemat a la memòria intermèdia (prova de profunditat ) i el substitueix. si el nou valor és més proper. Funciona conjuntament amb el rasteritzador, que calcula els valors de colors. El fragment sortit pel rasteritzador es desa si no se superposa amb un altre fragment.
Quan es visualitza una imatge que conté objectes o superfícies opaques parcialment o totalment superposades, no és possible veure completament aquells objectes que estan més allunyats de l'espectador i darrere d'altres objectes (és a dir, algunes superfícies s'amaguen darrere d'altres). Si no hi hagués cap mecanisme per gestionar les superfícies superposades, les superfícies es representarien una sobre l'altra, sense importar si estan pensades per estar darrere d'altres objectes. La identificació i eliminació d'aquestes superfícies s'anomena problema de la superfície oculta. Per comprovar la superposició, l'ordinador calcula el valor z d'un píxel corresponent al primer objecte i el compara amb el valor z a la mateixa ubicació del píxel al buffer z. Si el valor z calculat és més petit que el valor z que ja hi ha a la memòria intermèdia z (és a dir, el nou píxel està més a prop), aleshores el valor z actual a la memòria intermèdia z se substitueix pel valor calculat. Això es repeteix per a tots els objectes i superfícies de l'escena (sovint en paral·lel). Al final, el buffer z permetrà reproduir correctament la percepció de profunditat habitual: un objecte proper n'amaga un més lluny. Això s'anomena z-culling.
El buffer z té la mateixa estructura de dades interna que una imatge, és a dir, una matriu 2D, amb l'única diferència que emmagatzema un sol valor per a cada píxel de pantalla en lloc d'imatges en color que utilitzen 3 valors per crear color. Això fa que el buffer z aparegui en blanc i negre perquè no emmagatzema informació de color. La memòria intermèdia té les mateixes dimensions que la memòria intermèdia de pantalla per a la coherència.
Les proves de visibilitat primàries (com ara l'eliminació de la cara posterior) i les proves de visibilitat secundàries (com ara comprovacions de superposició i retalls de pantalla) es realitzen normalment en polígons d'objectes per saltar polígons específics que no són necessaris per representar. El buffer Z, en comparació, és relativament car, de manera que la realització de proves de visibilitat primàries i secundàries alleuja el buffer z d'alguna funció.
La granularitat d'un z-buffer té una gran influència en la qualitat de l'escena: el z-buffer tradicional de 16 bits pot provocar artefactes (anomenats " z-fighting " o costura) quan dos objectes estan molt a prop l'un de l'altre. Un buffer z de 24 o 32 bits més modern es comporta molt millor, tot i que el problema no es pot eliminar sense algorismes addicionals. Gairebé mai s'utilitza un buffer z de 8 bits perquè té massa poca precisió.

## Usos

El Z-buffer és una tecnologia que s'utilitza en gairebé tots els ordinadors, ordinadors portàtils i telèfons mòbils actuals per realitzar gràfics per ordinador en 3D. L'ús principal ara és per als videojocs, que requereixen un processament ràpid i precís de les escenes en 3D. El buffer Z s'implementa al maquinari de les targetes gràfiques de consum. El Z-buffer també s'utilitza (implementat com a programari en lloc de maquinari) per produir efectes especials generats per ordinador per a pel·lícules.
A més, les dades del buffer Z obtingudes a partir de la representació d'una superfície des del punt de vista d'una llum permeten la creació d'ombres mitjançant la tècnica de mapeig d'ombres.

## Matemàtiques

El rang de valors de profunditat a l'espai de la càmera que s'ha de representar sovint es defineix entre a ${\textit {near}}$ i ${\textit {far}}$ el valor de $z$.
Després d'una transformació de perspectiva, el nou valor de $z$, o $z'$, es defineix per:
$z'={\frac {{\textit {far}}+{\textit {near}}}{{\textit {far}}-{\textit {near}}}}+{\frac {1}{z}}\left({\frac {-2\cdot {\textit {far}}\cdot {\textit {near}}}{{\textit {far}}-{\textit {near}}}}\right)$
Després d'una projecció ortogràfica, el nou valor de $z$, o $z'$, es defineix per:
$z'=2\cdot {\frac {{z}-{\textit {near}}}{{\textit {far}}-{\textit {near}}}}-1$
on $z$ és l'antic valor de $z$ a l'espai de la càmera, i de vegades s'anomena $w$ o $w'$.
Els valors resultants de $z'$ es normalitzen entre els valors de -1 i 1, on el ${\textit {near}}$ l'avió està a -1 i el ${\mathit {far}}$ l'avió està a l'1. Els valors fora d'aquest interval corresponen a punts que no es troben al tronc de visualització i no s'han de representar.

## Referències

* ↑ Straßer, Wolfgang. «Zukünftige Arbeiten». A: Schnelle Kurven- und Flächendarstellung auf grafischen Sichtgeräten (en alemany), April 26, 1974.
* ↑ «Z-Buffer or Depth-Buffer method» (en anglès americà), 06-03-2018. [Consulta: 21 octubre 2023].
* ↑ «What is Z-buffering?» (en anglès). [Consulta: 21 octubre 2023].
* ↑ Akenine-Möller, Tomas. Real-Time Rendering, Fourth Edition (en anglès). CRC Press, 2018-08-06. ISBN 978-1-351-81615-1.