Z-puskurointi

Z-puskurointi  on tapa 3D - tietokonegrafiikassa ottaa huomioon kuvaelementin etäisyys . Se on yksi ratkaisuista "näkyvyysongelmaan". Erittäin tehokas ja siinä ei käytännössä ole haittoja laitteistossa toteutettuna . Ohjelmallisesti on olemassa muita menetelmiä, jotka voivat kilpailla sen kanssa: Z-lajittelu ("artistin algoritmi") ja binääritilan osiointi (BSP), mutta niillä on myös hyvät ja huonot puolensa. Z-puskuroinnin suurin haittapuoli on suuren muistimäärän kulutus : työssä käytetään ns. syvyyspuskuria tai Z-puskuria .

Z-puskuri on kaksiulotteinen taulukko , jonka jokainen elementti vastaa pikseliä näytöllä. Kun näytönohjain piirtää pikselin, sen etäisyys lasketaan ja kirjoitetaan Z-puskurisoluun. Jos kahden piirretyn kohteen pikselit menevät päällekkäin, niiden syvyysarvoja verrataan, lähempänä oleva piirretään ja sen etäisyysarvo tallennetaan puskuriin. Tuloksena olevaa graafista kuvaa kutsutaan z-syvyyskartaksi , joka on harmaasävyinen graafinen kuva , jonka jokainen pikseli voi ottaa jopa 256 harmaaarvoa. Ne määrittävät kolmiulotteisen kohtauksen kohteen etäisyyden katsojasta. Karttaa käytetään laajasti jälkikäsittelyssä äänenvoimakkuuden ja realistisuuden lisäämiseksi, ja se luo tehosteita, kuten syväterävyys , ilmakehän usva jne. Karttaa käytetään myös 3D-paketeissa teksturointiin , jolloin pinta kohokuvioidaan.

Alla on tulos kahden kortin yhteiskäytöstä. Tässä toinen kartta on otettu kohtauksesta, jossa ensimmäinen toimi pintaa puristavana tekstuurina.

Kartta 1 Kartta 2 Tulos

Syvyyspuskurin bittisyvyydellä on voimakas vaikutus renderöinnin laatuun: 16 - bittisen puskurin käyttö voi johtaa geometrisiin vääristymiin, kuten "paini"-efektiin, jos kaksi kohdetta ovat lähellä toisiaan. 24- ja 32-bittiset puskurit tekevät työnsä hyvin. 8 bittiä ei käytetä lähes koskaan alhaisen tarkkuuden vuoksi.

Edwin Catmullia pidetään yleensä z-puskurin keksijänä , vaikka Wolfgang Strasser kuvasikin tämän idean väitöskirjassaan (1974).

Vaihtoehdot

Klassisessa Z-puskurissa puskurin bittiristikko ei ole riittävän tarkka lähietäisyyksillä. Tämän ongelman ratkaisemiseksi käytetään w-puskuria , jossa ei käytetä etäisyyttä, vaan sen käänteistä ( ). Kumpaa on parempi käyttää - z-puskuri vai w-puskuri - riippuu ohjelmasta.

Nykyaikaisissa videosovittimissa työskentely z-puskurin kanssa vie suuren osan videosovittimen RAM -muistin kaistanleveydestä. Tämän torjumiseksi käytetään häviötöntä pakkausta : pakkaus/palautus vie vähemmän resursseja kuin muistin käyttö.

Kehyksen alussa puskuri täytetään jollakin numerolla (esimerkiksi numerolla 1.0). Se vie myös jonkin verran koneen aikaa, joten se tehdään usein näin: ensimmäinen kehyspuskurointi säädetään niin, että lähellä olevien kohteiden syvyys on 0,0 ja kaukana olevien kohteiden syvyys on 0,5. Toinen kehys on 1,0 - 0,5. Tämä vähentää tarkkuutta 1 bitin, mutta eliminoi puskurin huuhtelun.

Z-puskuri ja lajittelu

Vaikka Z-puskuri on suunniteltu erityisesti selviytymään näkyvien pintojen lajittelusta, Z-puskurin nopeus riippuu suuresti lajittelusta. Siksi moottorin on ainakin suunnilleen lajiteltava esineitä kaukaa lähelle.

Z-konflikti

Jos kahdella objektilla on läheinen Z-koordinaatti, joskus, riippuen näkökulmasta, toinen näytetään, sitten toinen, niin molemmat näytetään raidallisena. Tätä kutsutaan Z-konfliktiksi ( eng.  Z fighting ). Useimmiten konfliktit ovat ominaisia ​​erikoistehosteille (tarroille), jotka on asetettu päätekstuuriin, esimerkiksi luodinreikiin.

Z-ristiriidat ratkaistaan ​​siirtämällä yhtä objektia suhteessa toiseen arvolla, joka ylittää Z-puskurin virheen.