Bufor Z
W grafice komputerowej buforowanie Z jest częścią pamięci karty wideo odpowiedzialną za zarządzanie współrzędnymi głębi obrazów w grafice trójwymiarowej (3D), zwykle obliczanej sprzętowo , a czasem programowo . Jest to jedno z rozwiązań problemu widoczności , czyli problemu decydowania, które elementy renderowanej sceny są widoczne, a które ukryte. Algorytm malarza to kolejne powszechne rozwiązanie, choć mniej wydajne, może on również obsługiwać sceny z nieprzezroczystymi elementami. Buforowanie Z jest również znane jako buforowanie głębokości .
Gdy obiekt jest rysowany przez kartę graficzną 3D , głębia wygenerowanego piksela (współrzędna z) jest przechowywana w buforze danych ( bufor z ). Bufor ten jest zwykle dystrybuowany jako dwuwymiarowa (xy) tablica z jednym elementem na każdy piksel na ekranie. Jeśli jakiś inny obiekt w scenie musi być renderowany na tym samym pikselu, karta graficzna porównuje dwie głębokości i wybiera tę najbliższą widzowi. Wybrana głębokość jest następnie zapisywana w buforze Z, zastępując starą. W końcu bufor Z pozwoli karcie graficznej na prawidłowe odtworzenie normalnego postrzegania głębi: pobliskie obiekty ukrywają dalsze. Ten efekt nazywa się Z-Culling .
Szczegółowość bufora Z ma duży wpływ na jakość sceny: 16-bitowy bufor Z może generować Artefakty (tzw. „ walka Z ”), gdy dwa obiekty znajdują się blisko siebie. 24-bitowy lub 32-bitowy bufor Z działa znacznie lepiej. 8-bitowy bufor Z jest rzadko używany, ponieważ ma bardzo niską precyzję.
Rozwój
Nawet przy wystarczającej ziarnistości mogą pojawić się problemy z jakością, gdy dokładność wartości odległości z-bufora nie jest równomiernie rozłożona. Bliższe wartości są dokładniejsze (a tym samym mogą lepiej wyświetlać pobliskie obiekty) niż dalsze. Zwykle jest to pożądane, ale może powodować artefakty powodujące, że obiekty wydają się bardziej odległe. Istnieje odmiana bufora z, której dokładność wyników jest lepiej rozłożona, nazywana jest buforem w (patrz poniżej ).
Podczas rysowania nowej sceny, bufor Z musi zostać wyczyszczony do określonej wartości, zwykle 1.0, ponieważ ta wartość jest górną granicą głębokości dla skali od 0 do 1. Oznacza to, że nie ma żadnych obiektów dalej niż ten punkt na scenie frustum widzenia . [ 1 ]
Wynalezienie koncepcji bufora Z jest zwykle przypisywane Edwinowi Catmullowi . Istotnie, Wolfgang Straßer również opisał tę ideę w swojej pracy doktorskiej z 1974 r . 1 .
W najnowszych kartach graficznych do komputerów PC (1999-2005) zarządzanie buforem Z wykorzystuje znaczną część dostępnej przepustowości pamięci systemowej . W celu zmniejszenia tego wpływu zastosowano różne metody, takie jak kompresja bezstratna (zasoby komputerowe do kompresji i dekompresji są tańsze niż przepustowość) i ultraszybkie sprzętowe z-clear, które wykorzystuje przestarzałe „jedna klatka dodatnia, jedna klatka ujemna” (pomijanie klatek między używaniem podpisanych numerów, aby inteligentnie sprawdzić głębokość).
Ubój Z
W renderowaniu culling Z to wczesne usuwanie piksela na podstawie głębokości, metoda, która zapewnia wzrost wydajności, gdy renderowanie ukrytych powierzchni jest drogie. Jest to bezpośrednia konsekwencja buforowania Z, gdzie głębokość każdego kandydującego piksela jest porównywana z głębokością istniejącej geometrii, za którą może być ukryty.
W przypadku korzystania z bufora z, piksel można wybrać (odrzucić), gdy tylko znana jest jego głębokość, co pozwala pominąć cały proces oświetlenia i obliczania tekstury piksela, który i tak byłby niewidoczny. Zmniejszy się również czasochłonność modułu cieniującego , który zwykle nie będzie działał z odrzuconymi pikselami. To sprawia, że culling Z jest dobrym kandydatem do optymalizacji w sytuacjach, w których głównymi wąskimi gardłami są liczba klatek na sekundę, światło, obliczanie tekstury lub shader pikseli.
Podczas gdy buforowanie z pozwala na nieposortowanie geometrii, wielokąty sortowane według rosnącej głębokości (a więc przy użyciu algorytmu odwrotnego malowania ]]) pozwalają na renderowanie każdego piksela ekranu tylko raz. Może to zwiększyć wydajność w scenach z ograniczoną liczbą klatek na sekundę z dużymi kwotami przekroczeń bieżących.
Model matematyczny
Zakres wartości głębokości w przestrzeni odniesienia kamery ( projekcja 3D ) do renderowania jest zwykle definiowany między wartością bliską a wartością daleką od . Po przekształceniu perspektywicznym nowa wartość , lub , jest definiowana przez:
gdzie jest stara wartość w przestrzeni kamery i czasami nazywana o .
Otrzymane wartości są znormalizowane między wartościami -1 i 1, gdzie płaszczyzna bliska ( ) ma wartość -1, a płaszczyzna dalsza ( ) 1. Wartości poza tym zakresem odpowiadają punktom, które nie znajdują się w frustum wizji i nie będą malowane.
Aby zaimplementować bufor z, wartości są interpolowane liniowo w:Linear_interpolation wzdłuż przestrzeni ekranu między wierzchołkami wielokątów . Te wartości pośrednie są zwykle przechowywane w buforze z w postaci zmiennoprzecinkowej . Wartości są gęściej skupione w pobliżu płaszczyzny bliskiej ( ) i bardziej rozłożone w pozostałej części sceny, co skutkuje większą dokładnością w pobliżu kamery. Im bliżej kamery znajduje się bliska płaszczyzna, tym mniejsza jest precyzja pozostałej części sceny.
Bufor W
Aby zaimplementować w-bufor, stare wartości w przestrzeni komory lub , są przechowywane w buforze, zwykle w formacie zmiennoprzecinkowym . Jednak te wartości nie mogą być interpolowane liniowo do przestrzeni kamery z wierzchołków, ponieważ zwykle muszą być odwrócone, interpolowane i ponownie odwrócone. Wynikowe wartości są przeciwieństwami , które są równo rozmieszczone między i . Istnieją implementacje bufora W, które unikają inwersji.
W zależności od zastosowania lepsze wyniki uzyska się z buforem z niż z buforem w i na odwrót.
Zobacz także
- Edwin Catmull , wynalazca koncepcji bufora Z.
- grafika komputerowa 3D
- z walki
- Nieregularny bufor Z
- Kolejność Z
Referencje
- ↑ w:Viewing_frustum
Notatki
Uwaga 1: patrz WK Giloi, JL Encarnação, W. Straßer. „Szkoła Grafiki Komputerowej Giloi za”. Grafika komputerowa 35 4:12–16.