[Članak]S3D stuff : Arhiva
Mip-mapping
Mip-mapping je tehnika koja se primjenjuje kod teksturiranja (iscrtavanja tekstura) na poligone u 3D prostoru. Bavi se rješavanjem problema over-sampleovanh tekstura.
Kakav je problem u pitanju i kako nastaje?
Godinama evolucije 3D grafike povećale su se teksture (tj. njihove rezolucije), a i rezolucije prikaza (ekrana), te je problem oversamplovanih tekstura postajao sve uočljiviji. O čemu se radi? Tehnički gledano, to oversamplovanje znači previše slikovnih informacija na jednom mjestu. Kako li ih može biti previše, pitate se? Biće objašnjeno na primjeru : zamislite jednu teksturu sa crnim i bijelim kvadratićima, poput šahovske table. Ta tekstura je "zalijepljena" na jedan poligon na koji ravno gledamo. To bi izgledalo ovako nekako :
http://img224.imageshack.us/img224/4022/mipmaps1pj3.png
Slika je ok, sve super. Međutim, ako se taj poligon nalazi pod nekim drugim uglom u odnosu na kameru (posmatrača), već možemo uočiti probleme...
http://www.c-unit.com/tutorials/mdir...ointFilter.jpg
Primjećujete kako ružno izgleda gornji dio slike? Sve te crne i bijele linijice jedva da podsjećaju na originalnu sliku. A zašto je to tako? Zato što je originalna slika na tom mjestu udaljenija od kamera, pa je, mogli bismo reći - "mala". Tako da po jednom pixelu ekrana dolazi više od jednog pixela teksture (texel), i sada je problem - kojeg odabrati. Odabire se onaj najbliži, jer je tako programirano. Ali bez obzira koji da se odabere - nekog "ispravnog" odabira nema, jer ni jedan pojedini pixel ne može predstaviti sliku koju sačinjava više njih. Ako vam ona slika izgleda ružno, to nije ništa. Pravi horor nastaje kada sve to vidite u pokretu. Taj gornji dio slike bi samo treperio između nekih, naizgled nasumičnih, hrpa crnih i bijelih linija koje ni u jednom trenutku ne bi predstavljale "stvarnu" sliku. Pixeli bi se cijelo vrijeme "borili" međusobno za svoje mjesto na ekranu. Dakle, zaključili smo - previše ih je na jednom mjestu. Rješenje? Smanjiti broj pixela.
Kako to riješiti?
Možemo jednostavno otvoriti Photoshop i smanjiti teksturu 2 ili 3 puta uz neki bilinearni ili bikubični filter da zagladi rubove - i više ne bi bilo treperenja jer bi tekstura bila znatno niže rezolucije. Naravno, iz aviona se vidi da ovo rješenje uopšte nije idealno jer time gubimo detalje tamo gdje nam trebaju - na dijelovima bližim posmatraču. Znači, bilo bi dobro kada bi nekako mogli imati veću rezoluciju gdje nam treba detalja, a manju tamo gdje ti detalji prave probleme? E, tu uskače mip-mapping.
Da bi mip-mapping ispravno radio, treba nam unaprijed pripremljena tekstura. Takva tekstura se najčešće sastoji od slike u punoj veličini, nakon koje slijedi ista slika, samo smanjena (uz odgovarajući filter) na jednu četvrtinu prethodne i tako sve dok se ne dođe do 1x1 slike, tj. jednog jedinog pixela. To jako lijepo možete vidjeti na slijedećoj slici :
http://www.c-unit.com/tutorials/mdir...es/mipmaps.jpg
Dakle, tu vidimo originalnu sliku veličine 256x256 sa svojim mip-mapama veličina redom 128x128, 64x64, 32x32, 16x16, 8x8, 4x4, 2x2, 1x1. Uz toliko različitih varijanti imamo za svaku situaciju po nešto. A od čega zavisi koja će se varijanta odabrati? Problem oversamplinga je najuočljiviji kod udaljenih tekstura i tekstura na koje se gleda pod malim uglom, pa od toga upravo i zavisi koja će se varijanta odabrati (mip-level) - od udaljenosti i ugla. U preciznu matematiku vezanu za ovo neću ulaziti. Vjerovatno ste u nekim tweaking alatima vidjeli nešto što je nosilo naziv "Mipmap LOD bias" ili nešto slično, pa ste imali neki opseg od -3 do +3. E, to je podešavanje mipmapinga koje određuje da li će on biti naklonjeniji manjim ili većim varijantama teksture, tj. direktno utiče na odabir mip-levela za pojedini dio slike. Da ne tupim previše, evo kako bi ona slika izgledala s mip-mappingom (u kombinaciji s bilinearnim filterom) :
http://www.c-unit.com/tutorials/mdir...nearFilter.jpg
Ljepše, uglađenije, i bez ikakvih treperenja i naglih prijelaza. No, naravno, možda već uočavate da tehnika nije savršena...
Koji su nedostaci?
Kao prvo i osnovno, čim se spominju dodatne varijante tekstura, logično je da i njih negdje treba spremiti - dakle, mip-mapping nameće dodatne memorijske troškove. Uz malo jednostavne matematike dobijamo da mip-mappovana tekstura zauzima 33% više memorije. Takođe, na slici možemo primijetiti da prikaz takvih tekstura ima tendenciju da bude previše mutan u pojedinim dijelovima. Ovaj problem se prilično efikasno rješava anisotropskim filterom, ali o tome ćemo drugom prilikom.
Neke od slika - ©2004-2007 Chad Vernon