Anti-aliasointianalyysi, Osa I: Asetuksia ja yllätyksiä

Artikkelin kirjoittaja: Panu Roivas | 1 kommentti

Geneeriset anti-aliasointitoteutukset



Tiedät siis mitä aliasointi tarkoittaa ja kuinka anti-aliasointi korjaa sitä. Mutta kuinka tämä käytännössä tapahtuu? Seuraavaksi käsittelemme kahta geneeristä anti-aliasointimetodia, jotka ovat yleisesti käytössä: supersampling ja multisampling.

Supersampling

Ilman anti-aliasointia tietokone renderöi vain sen mitä se löytää pikselin keskeltä ja värittää pikselin sen mukaan.

Supersampling on ensimmäinen anti-aliasointimetodi jota on käytetty kuluttajanäytönohjaimissa. Käsite on yksinkertainen: sen sijaan että pikselin väri otettaisiin pikselin keskeltä, otetaan useita näytteitä pikselin sisältä ja lasketaan niiden keskiarvo.

Sanotaan että sinulla on 1280x720 monitori. Jos pelaat peliä ja enabloit 4x supersampling anti-aliasoinnin, näytönohjaimen on renderöitävä jokainen kuva 2560x1440 –resoluutiolla ja sen jälkeen down-samplattava (laskettava keskiarvo) 1280x720 –resoluutiolle. Tuloksena reunat näyttävät sulavammilta. Itse asiassa kaikki näyttää paremmalta: reunat, tekstuurit ja läpinäkyvät pinnat. Tämä on supersamplauksen suurin etu.



Supersamplaus on edelleen korkeimmanlaatuinen anti-aliasointikeino joka on tarjolla. Mutta jos se on niin loistava, miksi käyttäisimme mitään muuta? Valitettavasti se on myös laskennallisesti kaikkein kallein keino, sillä näytönohjain joutuu laskemaan jokaisen kuvan korkealla resoluutiolla. Supersamplaus romahduttaa ruudunpäivitysnopeuden, joten tarvitsemme tehokkaampia keinoja. Eli multisamplauksen.

Multisampling

Multisamplaus (MSAA) luotiin nopeammaksi vaihtoehdoksi supersamplaukselle. Sen pyrkimyksenä on optimoida kuvanlaatu vieden samalla mahdollisimman vähän laskentatehoa. Tätä tarkoitusta varten MSAA käyttää pääasiassa kahta tekniikkaa.

Ensimmäinen keino on edge anti-aliasing, eli pelkkien reunojen pehmennys. Näytönohjain renderöi mahdollisimman paljon kuvasta ilman anti-aliasointia, mutta prosessoi ylimääräisiä näytteitä objektien reunoilta, jotka hyötyvät tästä eniten. Ennen anti-aliasointia on tehtävä Z-testi, joka laskee pikselin sisäisen syvyyseron, ja tunnistaa tällä tapaa reunapikselit.

Toinen MSAA:n käyttämä keino on nimeltään reduced-sampling workload. Osa laskuista suoritetaan vain kerran per pikseli, kuten pikselivarjostin, tekstuurihaut ja värisamplaukset. Vain syvyys- ja stensiiliarvot samplataan täysin. PC käyttää tätä informaatiota määritelläkseen optimaalisen arvon objektin ja taustan väliselle värille.

Tässä on esimerkki siitä kuinka 4x MSAA –samplaus toimii. Vasemmalla voit nähdä neljä pikseliä, joista kolme sisältää kolmion reunan ja ne on huomattu Z-arvon erolla, joten MSAA:ta käytetään näissä pikseleissä. Punaiset pisteet edustavat kohtaa, josta MSAA kerää arvon. Koska käytämme 4x MSAA:ta, neljä arvoa kerätään jokaisesta pikselistä:



Yllä olevasta kuvasta nähdään 4x MSAA neljällä kerätyllä arvolla per pikseli. Mitä enemmän arvoja kerätään, sitä tarkempi väritulos tulee olemaan. 8x MSAA tarjoaa paremman tuloksen kuin 4x MSAA, ja 4x MSAA on parempi kuin 2x MSAA.

Koska tämä artikkeli on tarkoitettu kaikille, yleistämme tässä muutamia asioita tarkoituksella. Esimerkiksi tilanteessa, jossa samassa pikselissä on useampi objekti, MSAA voi laskea arvoja useista väreistä saman pikselin sisällä. DirectX 9:n centroid-samplausta voidaan käyttää varmistaessa että arvo otetaan objektista eikä taustasta.

MSAA on ollut de facto anti-aliasointikeino sen adoptoinnista lähtien, ja se tarjoaa hyvän tasapainon kuvanlaadun ja suorituskyvyn välillä verrattuna supersamplaukseen. Tästä huolimatta se voi olla raskas keskitason ja budjettikokoonpanoille. Lisäksi MSAA:n kaltainen reunanpehmennys ei tuo lisää tarkkuutta tekstuureihin samaan tapaan kuin supersamplaus. Tekstuureilla (erityisesti objektit joilla on läpinäkyviä tekstuureja) voi olla aliasoituvia reunoja joita tämä metodi ei havaitse. Alla olevassa esimerkissä voit huomata, että MSAA silottaa objektien reunoja, mutta ristikkoaidan läpinäkyvä tekstuuri sekä heijastuva vesi eivät silotu.



Näiden ongelmien takia näytönohjainvalmistajat kuten AMD ja Nvidia ovat adoptoineet omia anti-aliasointikeinoja MSAA:n tueksi. Seuraavaksi käymme läpi niitä, mutta ennen sitä katsomme muutamia kuvanlaatuvertailuja nähdäksemme kuinka GeForce ja Radeonit vertautuvat toisiinsa kun käytetään perinteisiä anti-aliasointikeinoja.

Supersampling ja Multisampling: kuvanlaatuvertailu

Ensimmäisenä voimme huomauttaa että Nvidia poisti mahdollisuuden supersamplaukseen ajureistaan jonkin aikaa sitten. Nvidian mukaan tämä ominaisuus otettiin pois koska se laski suorituskykyä liian paljon, joten emme pysty vertaamaan supersamplauksen eroa GeForcella.

Vastaavasti AMD tukee supersamplausta vain DirectX 9:n kautta – DX10 ja 11 eivät ole tuettuna. Tämä ei ole kuitenkaan yhtä paha asia kuin miltä se kuulostaa, sillä iso osa peleistä käyttää edelleen DX 9:ää ja supersamplaus on todennäköisesti niin raskas, ettei sitä kannata edes kokeilla uudemmissa ja raskaimmissa peleissä.

Vertaamme supersamplausta ja MSAA:ta käyttämällä Valven Source Engine moottoria:




Kuten voit nähdä AMD:n ja Nvidia:n MSAA on hyvin samankaltainen. Vaikuttaa myös siltä, että yli neljän arvon laskennan jälkeen saavutettava hyöty heikentyy selvästi. 4x MSAA on selvästi parempi kuin 2x MSAA, mutta 8x MSAA ei ole enää huomattavasti parempi kuin 4x MSAA. 8x MSAA:n ja 16x MSAA:n välinen ero on tuskin huomattavissa.

kommentti 1

sam49

Kiitokset. On hyvä täydentävä teksti tietokonegrafiikan oppikirjoihinkin nähden. Ainoa muutos, jonka toivoisin näytekuviin olisi, että ne voisi ladata omalle koneelle hiukan isommassa koossa ja vertailla niitä rinnakkain.

Kommentoi artikkelia