Z-buffering

Z-buffering  je způsob, jak ve 3D počítačové grafice zohlednit vzdálenost obrazového prvku . Je to jedno z řešení „problému s viditelností“. Velmi efektivní a při implementaci v hardwaru nemá prakticky žádné nevýhody . Programově existují další metody, které mu mohou konkurovat: Z-sort ("algoritmus umělce") a binární dělení prostoru (BSP), ale také mají své výhody a nevýhody. Hlavní nevýhodou Z-bufferu je spotřeba velkého množství paměti : v práci se používá tzv. hloubkový buffer neboli Z-buffer .

Z-buffer je dvourozměrné pole , jehož každý prvek odpovídá pixelu na obrazovce. Když grafická karta nakreslí pixel, vypočítá se jeho vzdálenost a zapíše se do buňky Z-buffer. Pokud se pixely dvou nakreslených objektů překrývají, jejich hodnoty hloubky se porovnají a vykreslí se ten, který je blíže, a jeho hodnota vzdálenosti se uloží do vyrovnávací paměti. Výsledný grafický obrázek se nazývá z-depth map , což je grafický obrázek ve stupních šedi , jehož každý pixel může mít až 256 hodnot šedé. Určují vzdálenost od diváka objektu trojrozměrné scény. Mapa je široce používána v následném zpracování pro přidání objemu a realismu a vytváří efekty, jako je hloubka ostrosti , atmosférický opar atd. Mapa se také používá ve 3D balíčcích pro texturování , takže povrch je reliéfní.

Níže je výsledek společného použití dvou karet. Zde je druhá mapa převzata ze scény, ve které první fungovala jako textura vytlačující povrch.

Mapa 1 Mapa 2 Výsledek

Bitová hloubka hloubkové vyrovnávací paměti má silný vliv na kvalitu vykreslování: použití 16bitové vyrovnávací paměti může vést ke geometrickým deformacím, jako je „zápasový“ efekt, pokud jsou dva objekty blízko sebe. 24, 32 bitové vyrovnávací paměti dělají svou práci dobře. 8 bitů se téměř nepoužívá kvůli nízké přesnosti.

Edwin Catmull je obvykle považován za vynálezce z-bufferu , ačkoli tuto myšlenku popsal Wolfgang Strasser ve své disertační práci (1974).

Možnosti

V Z-bufferu v jeho klasické podobě není bitová mřížka bufferu dostatečně přesná na malé vzdálenosti. K vyřešení tohoto problému se používá w-buffer , ve kterém se nepoužívá odlehlost, ale její reciproční ( ). Co je lepší použít - z-buffer nebo w-buffer - záleží na programu.

Na moderních grafických adaptérech zabírá práce se z-bufferem velkou část šířky pásma RAM grafického adaptéru . K boji proti tomu se používá bezeztrátová komprese : komprese / obnova vyžaduje méně zdrojů než přístup do paměti.

Na začátku rámce je vyrovnávací paměť vyplněna nějakým číslem (například číslem 1.0). Zabere to také nějaký strojový čas, takže se to často dělá tímto způsobem: vyrovnávací paměť prvního snímku je upravena tak, aby hloubka blízkých objektů byla 0,0 a vzdálených objektů 0,5. Druhý snímek je od 1,0 do 0,5. To snižuje přesnost o 1 bit, ale eliminuje proplachování vyrovnávací paměti.

Z-buffer a řazení

Ačkoli je Z-buffer navržen speciálně tak, aby se obešel bez řazení viditelných ploch, rychlost Z-bufferu vážně závisí na řazení objektů. Proto musí motor alespoň přibližně třídit předměty z dálky do blízka.

Z-konflikt

Pokud mají dva objekty blízkou Z-souřadnici, někdy, v závislosti na úhlu pohledu, je zobrazen jeden, pak druhý, pak jsou oba zobrazeny v pruhovaném vzoru. Tomu se říká Z-konflikt ( angl.  Z bojování ). Konflikty jsou nejčastěji součástí speciálních efektů (obtisků), které se překrývají s hlavní texturou, například díry po kulkách.

Z-konflikty jsou řešeny posunutím jednoho objektu vůči druhému o hodnotu přesahující chybu Z-bufferu.