Newsgroup: it.comp.hardware.video-3d
Titolo: Z-Buffering, che cosa fa di preciso??

Dato che è un collo di bottiglia per schede con 4 mega che vogliono fare
andare i giochi in alte risoluzioni, che cosa fa lui di preciso? Qual'è la
sua funzione grafica precisa? Io so che a 640*480 si va con tutti gli
effetti senza problemi, ma se si alza la risoluzione, si sbocca con poca
memoria.
Parlatemi un po' dello Z-Buffering.
Ciao a tutti e buon anno!
Elia Spadoni
EPIZ...@racine.ra.it

sua funzione grafica precisa?
Lo zbuffer e' un sistema molto semplice e molto veloce per realizzare una
funzione che altrimenti sarebbe piuttosto complessa. Saltando i vari
preliminari la scheda 3D si trova con una lista di triangoli con vertici 3D
(con 3 coordinate) da rappresentare su uno schermo a 2D. Per farlo deve
ovviamente applicare le regole della prospettiva, ma si presenta un
problema: I triangoli piu' vicini devono coprire quelli piu' lontani. Per
farlo e' possibile pensare alcuni sistemi nemmeno troppo difficili, ma
spesso lenti, ad esempio ordinare i triangoli in ordine di distanza in base
alla profondita' dei vertici. Questo introduce pero' diversi problemi con i
triangoli che si intersecano, che andrebbero opportunamente tagliati nel
punto di intersezione. (In alcuni casi per aumentare le prestazioni si
potrebbe fare anche con lo zbuffer).
Lo zbuffer dicevo e' un sistema semplice per sapere quali pixel di un
triangolo vanno tracciati e quali no: per ogni pixel sullo schermo si
memorizza un valore di "profondita'". Quando viene colorato un pixel, nel
corrispondente punto dello zbuffer viene memorizzata la profondita' di
questo pixel. Se in seguito viene di nuovo disegnato un triangolo si
verifica prima di tracciare un pixel la profondita' di quello precedente. Se
e' maggiore di quella del pixel da tracciare lo si traccia, perche' vuole
dire che il nuovo pixel sarebbe "davanti" a quello precedente, mentre se e'
inferriore non viene tracciato perche' sarebbe coperto dallo stesso.
Riassumendo in due parole per ogni pixel:
1. Si calcola la posizione proiettata in X e Y dello schermo partendo dalla
posizione x,y,z nello spazio 3D, e si calcola il valore della profondita' Z
dello stesso.
2. Prima di tracciarlo si verifica il valore dello Zbuffer alle coordinate
X,Y
3a. Se e' maggiore di Z, non si disegna il pixel.
3b. Se e' minore di Z si disegna il nuovo pixel e si inserisce il valore Z
nello zbuffer alla posizione X,Y.
Questo semplice sistema permette anche di gestire l'intersezione tra
superfici. Riguardo le richieste di memoria come detto e' necessario un
valore di profondita' per ogni pixel dello schermo. Lo spazio richiesto
dalla profondita' dipende dalla precisione voluta, di solito si usano 16 bit
che permettono 64K valori diversi. Ogni pixel richiede quindi nello zbuffer
2 byte (16/8), cioe' nel caso ad esempio di 640x480 lo zbuffer a 16 bit
richiede: (640x480x2)/1024=600k.
Poiche' anche il buffer primario e secondario richiedono memoria, se
supponiamo 16 bit di colore (2 byte) vremmo: (640x480x2)/1024=600k per ogni
buffer. Totale 600K x 3 = 1800K che come vedi ci stanno nei 2Mb. Al
contrario 800x600 a 16 bit di colore con 16 bit di zbuffer e double
buffering (totale 3 buffer) richiederebbe: 800x600x2x3=2.8Mb circa.
Ecco spiegato perche' in 2Mb non ci sta lo zbuffer a 800x600.
--
-=================[ ICQ:   787595 ]=================-
       Marco Braga - Email: 
bra...@tin.it
            F.A.Q. sulle schede 3D / 3dfx
 
http://www.ludus.com/TECNICO/schede3d/
 Join The Wild Wereboar Team  RC5-64 Project effort!
 
http://www.geocities.com/SiliconValley/Horizon/5766
-===================================================-

 
EPIZ...@racine.ra.it
z-buffering:
 A technique for managing which surfaces are visible or invisible along
the distance axis (z-axis) by storing depth values before calculating
hidden surfaces. Z-buffering is more CPU- and memory-intensive than the
less accurate z-sorting method.
Se non hai capito chiedimi la trad.
ciao

z-buffering:
A  technique for managing which surfaces are visible or invisible along
the distance axis (z-axis) by storing depth values before calculating
hidden surfaces. Z-buffering is more CPU- and memory-intensive than the
less accurate z-sorting method.
Se non hai capito chiedimi la trad.
ciao
Ho capito, lo so l'inglese.
Cmq, se un gioco lo faccio con o senza z-buffering, graficamente noto la
differenza?
Esempio: mettiamo che un gioco con z-buff vada a (per esempio!!!) 35 fps a
640*480 e senza z-buff 27 fps a 800*600. Sarebbe meglio una 800*600 senza
z-buff o una 640*480 con z-buff?
Ciao
ES
EPIZ...@racine.ra.it

 ciao
Ma perchè non scrivi direttamente in italiano? In questo ng mi pare che
sia la lingua più utilizzata, quindi perchè complicarci la vita? Aspetto
traduzione, grazie. :-D

 differenza?
La differenza la noti perche' senza z-buffering c'e' la possibilita' che
l'immagine che ti viene mostrata non sia corretta, ad esempio che tu
veda oggetti nascosti.
Ciao

 > less accurate z-sorting method.
ok, scusate, ma il tempo in rete costa e il copy-paste l'avevo fatto on
line sicche' mi costava star qui a tradurre... :))
Una tecnica per decidere qali superfici siano visibili e quli non lungo
l'asse z, cioe' in profondita'.
Si ottiene associando ad ogni punto una distanza e quindi 2decidendo"
quali punti siano visibili e quali non.
La tecnica di z-buffering richiede piu' risorse della tecnica di
z-sorting che pero' e' meno accurata.
Cmq l'avevano gia' deto altri in italiano :))
Ciao... un quarto di scatto...

z-buff o una 640*480 con z-buff?
Dipende dalla scheda video, ad esempio nelle 3dfx lo zbuffering non comporta
alcuna differenza evidente di prestazioni, il problema e' appunto quello
della risoluzione. Alla fine sta a te decidere cosa e' "meglio", tutto
dipende da cosa vuoi migliorare.


Non mi ricordo se ho postato (ho incasinato un po' il mio newsclient), nel
dubbio riposto:

--
