A Z-pufferelés a 3D számítógépes grafika egyik módja annak , hogy figyelembe vegyék egy képelem távolságát . Ez az egyik megoldás a "láthatósági problémára". Nagyon hatékony , és gyakorlatilag nincs hátránya hardverben való megvalósításkor . Programozásilag más módszerek is felvehetik a versenyt vele: a Z-sort ("művész algoritmusa") és a bináris térfelosztás (BSP), de ezeknek is megvannak a maga előnyei és hátrányai. A Z-pufferelés fő hátránya a nagy mennyiségű memória fogyasztása : az úgynevezett mélységi puffert vagy Z-puffert használják a munkában .
A Z-puffer egy kétdimenziós tömb , amelynek minden eleme egy-egy pixelnek felel meg a képernyőn. Amikor egy videokártya pixelt rajzol , a távolság kiszámításra kerül, és a Z-puffer cellába íródik. Ha két megrajzolt objektum pixelei átfedik egymást, akkor a mélységértékeiket összehasonlítjuk, és a közelebbiet megrajzoljuk, és a távolság értékét a pufferben tároljuk. Az eredményül kapott grafikus képet z-mélységi térképnek nevezzük , amely egy szürkeárnyalatos grafikus kép , amelynek minden pixele legfeljebb 256 szürke értéket vehet fel. Meghatározzák egy háromdimenziós jelenet tárgyának távolságát a nézőtől. A térképet széles körben használják utófeldolgozásban a térfogat és a valósághűség növelésére, és olyan hatásokat hoz létre, mint például a mélységélesség , a légköri köd stb .
Az alábbiakban a két kártya együttes használatának eredménye látható. Itt a második térkép egy olyan jelenetből készült, amelyben az első a felületet kinyomó textúraként működött.
1. térkép | 2. térkép | Eredmény |
A mélységi puffer bitmélysége erősen befolyásolja a renderelés minőségét: a 16 bites puffer használata geometriai torzulásokhoz, például „birkózó” effektushoz vezethet, ha két objektum közel van egymáshoz. A 24, 32 bites pufferek jól végzik a dolgukat. 8 bitet szinte soha nem használnak az alacsony pontosság miatt.
Edwin Catmull -t általában a z-puffer feltalálójának tartják , bár ezt az ötletet Wolfgang Strasser írta le disszertációjában (1974).
A klasszikus formájú Z-pufferben a puffer bitrácsa közeli távolságban nem kellően pontos. A probléma megoldására egy w-puffert használnak, amelyben nem a távoliságot, hanem annak reciprokát ( ). A programtól függ, hogy melyiket érdemesebb használni - z-buffer vagy w-buffer.
A modern videoadaptereken a z-pufferrel való munkavégzés a videoadapter RAM -jának sávszélességének nagy részét lefoglalja. Ennek leküzdésére veszteségmentes tömörítést alkalmaznak : a tömörítés/helyreállítás kevesebb erőforrást igényel, mint a memóriaelérés.
A keret elején a puffer fel van töltve valamilyen számmal (például az 1.0 számmal). Ez némi gépidőt is igénybe vesz, ezért gyakran így történik: az első képkocka pufferelése úgy van beállítva, hogy a közeli objektumok mélysége 0,0, a távoli objektumoké pedig 0,5. A második képkocka 1,0 és 0,5 között van. Ez 1 bittel csökkenti a pontosságot, de kiküszöböli a puffer öblítését.
Bár a Z-puffer kifejezetten a látható lapok rendezése nélkül készült, a Z-puffer sebessége komolyan függ az objektumok rendezésétől. Ezért a motornak legalább megközelítőleg szét kell rendeznie a távolról közeli tárgyakat.
Ha két objektumnak közeli Z-koordinátája van, néha a nézőponttól függően az egyik, majd a másik, akkor mindkettő csíkos mintázatban látható. Ezt hívják Z-konfliktusnak ( eng. Z fighting ). A konfliktusok leggyakrabban olyan speciális effektusokban (matricákban) rejlenek, amelyeket a fő textúrára helyeznek, például golyólyukakat.
A Z-konfliktusokat úgy oldják meg, hogy az egyik objektumot a másikhoz képest a Z-puffer hibáját meghaladó értékkel eltolja.