Z-puskurointi
Z-puskurointi (engl. depth buffer, syvyyspuskuri) on tietokonegrafiikan tekniikka, jolla käsitellään 3D-kuvan syvyyttä. Yleensä Z-puskurointi toteutetaan laitteistolla, toisinaan ohjelmallisesti. Se auttaa ratkaisemaan piilotetun pinnan poistoa, jossa pitää kyetä valitsemaan mitkä näkymän elementit ovat näkyviä ja mitkä piilossa. Lisäksi käytössä on algoritmeja kuten maalarin algoritmi, joka on huomattavasti tehottomampi ratkaisu.
Kun kappale mallinnetaan grafiikkasuorittimella, tuotetun pikselin syvyys (z-koordinaatti) tallennetaan puskuriin (z-puskuri). Yleensä tämä puskuri esitetään 2-ulotteisena XY-taulukkona, jossa kutakin taulukon elementtiä vastaa yksi kuvapiste näytöllä. Jos jonkin kappaleen kuvapiste piirretään samaan pikseliin kuin mihin on aiemmin piirretty, suoritin vertaa syvyyksiä ja valitsee niistä katsojaa lähinnä olevan. Valittu syvyys tallennetaan sitten z-puskuriin vanhan arvon tilalle. Näin puskurin avulla voidaan tuottaa tyypillinen syvyysvaikutelma: lähempänä oleva kappale peittää kauempana olevan.
Z-puskurin tarkkuudella on merkittävä vaikutus näkymän laatuun. 16-bittinen Z-puskuri voi tuottaa häiriöitä kun kaksi kappaletta ovat hyvin lähellä toisiaan. 24- tai 32-bittinen Z-puskuri toimii huomattavasti paremmin. 8-bittistä Z-puskuria ei käytetä juuri koskaan sen hyvin heikon tarkkuuden vuoksi.
Syvyyspuskuri ja säteensuuntaus ovat suosituimmat tavat oikean näkyvyyden varmistamiseen nykyään.[1]
Perinteinen Z-puskurointi on kehitetty tietokoneavusteiseen suunnitteluun, jossa näkymä on tunnettu ja rajattu, ja syvyysarvot ovat myös rajatulla alueella. Perspektiivin mukaan korjattu Z-arvo ei jakaannu tasaisesti Z-puskurin alueelle. Viihteessä ja visuaalisessa simulaatioissa ulkoilmassa tarvitaan suurempia arvoalueita, joka voi aiheuttaa piirtovirheitä etäisissä kappaleissa. W-puskuroinnissa (silmään suhteutettu Z) puskurin käyttö voi jakaantua tasaisemmin läheisten ja kaukaisten kappaleiden välillä.[2]
Z-culling on useimpien modernien grafiikkasuorittimen tekemä optimointi, josta on kaksi versiota: Zmax ja Zmin.[3]
Muun muassa Edwin Catmull liitetään Z-puskuroinnin kehitykseen.[4][5]
Teoriaa
Kameran käyttämä syvyysasteikko määritellään yleensä -koordinaatin arvoilla ja . Perspektiivimuunnoksen jälkeen uusi arvo tai saadaan lausekkeesta
Missä on vanha kamera-avaruudessa, ja sitä merkitään joskus tai . Lopulta arvoväli [near, far] normalisoidaan usein välille [-1, 1] vastaavassa järjestyksessä.
Lähteet
- ↑ Akeley, Feiner, Foley, Hughes, Van Dam, McGuire, Sklar: Computer Graphics Principles and Practive, s. 1023. (Third Edition) Addison-Wesley, 2014. ISBN 978-0-321-39952-6 (englanniksi)
- ↑ W-Buffering docs.microsoft.com. 20.4.2017. Viitattu 10.1.2021. (englanniksi)
- ↑ Akenine-Möller, Tomas & Haines, Eric & Hoffman, Naty: Real-Time Rendering, s. 856. (Third Edition) CRC Press, 2008. ISBN 978-1-56881-424-7 (englanniksi)
- ↑ Tekla S. Perry: And the Oscar Goes To... spectrum.ieee.org. 2.4.2001. Viitattu 12.1.2021. (englanniksi)
- ↑ https://ohiostate.pressbooks.pub/app/uploads/sites/45/2017/08/The_Giloi_school.pdf
Aiheesta muualla
- Hierarchical Z-Buffer Visibility (PDF) (englanniksi)