Tietokonegrafiikan perusteet T-111.4300 3 op Luento 6: Piilopinnat ja Näkyvyys Janne Kontkanen Geometrinen mallinnus / 1 Johdanto Piilopintojen poisto-ongelma Syntyy kuvattaessa 3-ulotteista maailmaa 2-ulotteisella pinnalla Samaan pikseliin voi osua useita pintoja Ilman piilopintojen poisto-algoritmia, pikselin värin määrää pinta joka on piirretty viimeisenä Oikea tulos saadaan kuitenkin vain jos pikseliin piirtyy sen pinnan väri, joka on lähimpänä katsojaa Näkyvyysoptimointi tehokkuusmielessä Mitä aikaisemmassa vaiheessa grafiikkaliukuhihnaa lopulliseen kuvaan vaikuttamaton geometria saadaan eliminoitua, sitä parempi tehokkuus saavutetaan Geometrinen mallinnus / 2 1
Sisältö Historiaa Syvyyslajittelu Juovalajittelu Syvyyspuskuri A-puskuri Säteenjäljitys Geometrinen mallinnus / 3 Historiaa: syvyyslajittelu Maalarin algoritmi: 1 Järjestä primitiivilista siten että kauimpana kamerasta olevat primitiivit (esim. polygonit) ovat listassa ensimmäisenä (voidaan käyttää z- koordinaatin arvoa kameran lokaalissa koordinaatistossa) 2 Aloita piirtämään primitiivejä listan mukaisessa järjestyksessä Ominaisuuksia: Ajatus on hyvin yksinkertainen Lajittelu on kallista ja ei sovi nykyisten grafiikkalaitteistojen arkkitehtuuriin Primitiivien syvyysjärjestys ei ole välttämättä yksiselitteinen: -> Ongelmatapauksissa primitiivejä joudutaan pilkkomaan Ei laajassa käytössä nykypäivänä Geometrinen mallinnus / 4 2
Juovalajittelu Primitiivit pilkotaan vaakasuuntaisiksi viivasegmenteiksi Algoritmi 1. Rakennetaan kullekin pyyhkäisyjuovalle (y=vakio) lista sitä leikkaavista polygoneista, Talletataan ainakin: alku ja loppupiste (x0,x1) syvyyskoordinaatit (z0, z1) 2. Kävellään pikselit pyyhkäisyjuova kerrallaan vasemmalta oikealle pitäen kirjaa tämän hetkistä pikseliä peittävistä polygoneista ja niiden syvyydestä -syvyyskoordinaatti voidaan selvittää interpoloimalla -pikselin väri määräytyy lähimmän pinnan mukaan Ominaisuuksia Ei sovi nykyisten grafiikkalaitteistojen arkkitehtuuriin Juovakonversio täytyy tehdä ensin kaikelle geometrialle, vasta sen jälkeen pikselien arvot voidaan selvittää Ei kovin laajassa käytössä nykypäivänä Geometrinen mallinnus / 5 Syvyyspuskuri Nykyisten rasterointiin perustuvien arkkitehtuurien standardiratkaisu Piirrettäessä kuvaa merkitään jatkuvasti kuhunkin pikseliin muistiin sekä toistaiseksi lähimmän siihen osuneen kuvapisteen väri että sen etäisyys (z-arvo) katselupisteestä. Helppo toteuttaa: 1. Alustus: for each pixel do begin color[x,y] := background_color; depth[x,y] := max_depth end 2. Joka objektille (mielivaltaisessa järjestyksessä!) projisointi ja juovamuunnos, minkä yhteydessä kunkin pikselin kohdalla: if z < depth[x,y] then begin color[x,y] := object_color ; depth[x,y] := z end Geometrinen mallinnus / 6 3
Syvyyspuskuri Ominaisuuksia Primitiivit voidaan piirtää mielivaltaisessa järjestyksessä Valmiiseen kuvaan voidaan lisätä uutta geometriaa jos syvyyspuskuri on vielä saatavilla Ei toimi puoliläpinäkyvillä pinnoilla oikein Puoliläpinäkyvien pintojen piirto syvyyspuskuria käytettäessä 1. Alusta syvyyspuskuri 2. Piirrä kaikki läpinäkymätön geometria 3. Järjestä läpinäkyvä geometria takaa eteen 4. Piirrä läpinäkyvä geometria käyttäen maalarin algoritmia (Päästiin siis ojasta allikkoon) Geometrinen mallinnus / 7 A-puskuri A-puskuri kehitettiin ratkaisemaan syvyyspuskurin ongelmat Alunperin osana REYES-arkkitehtuuria, johon esim. Pixarin renderöintityökalut vieläkin perustuvat Sovellettavissa kuitenkin tavalliseen rasterointiarkkitehtuuriin Perusidea: Jokainen pikseli sisältää listan joka esittää kaikkia siihen osuvia pintoja Jokainen listan elementti voi sisältää seuraavia Syvyys, väri, läpinäkyvyys, peittoprosentti, muita renderöintiin liittyviä parametreja Lopullista kuvaa muodostettaessa, A-puskurissa olevat listat käydään läpi kullekin pikselille syvyysjärjestyksessä Geometrinen mallinnus / 8 4
Näkyvyysoptimointi Sovelluksen tulisi mahdollisimman nopeasti löytää geometria joka voi päätyä kuva-alalle Tapoja Näkymäfrustumin ulkopuolelle jäävien objektien poisto (view frustum culling) Takaperin olevien tahkojen poisto (back-face culling) Peittyvän geometrian poisto (occlusion culling) Geometrinen mallinnus / 9 Näkymäfrustumin ulkopuolelle jäävien objektien poisto Eng. View frustum culling Yleensä ensimmäinen suoritettava näkyvyysoptimointi Kannattaa tehdä mahdollisimman aikaisessa vaiheessa käyttäen esimerkiksi mallien ympäripiirrettyjä laatikoita Lähde: http://www.lighthouse3d.com/opengl/viewfrustum/ Geometrinen mallinnus / 10 5
Takaperin olevien tahkojen poisto Poistetaan pinnat joiden normaali osoittaa katsojasta poispäin (normaalisti tällaiset pinnat eivät näy) Kameran lokaalissa koordinaatistossa riittää tarkastella kunkin pintanormaalin z-komponenttia (alla Nz) z Nz > 0 Takaperin oleva pinta Katselusuunta Nz < 0 xy Geometrinen mallinnus / 11 Peittyvien pintojen poisto Näkyvyysoptimoinneista hankalin Kuinka tietää näkyykö osaa jostakin objektista/pinnasta, piirtämättä sitä? Mahdollisia ratkaisuja PVS-rakenteet (Potential Visible Set) Esiprosessi: maailma jaetaan soluihin ja rakennetaan kullekin solulle S, PVS-lista joka kertoo mitä soluja S:stä voi nähdä Ajon aikana: etsitään solu K joka sisältää katsojan, ja piirretään vain solut jotka ovat potentiaalisesti nähtävissä K:sta (eli K:n PVS-lista) Dynaaminen näkyvyysoptimointijärjestelmä http://www.umbra.fi/ Geometrinen mallinnus / 12 6
Säteenjäljitys (ray tracing) Nykyään renderöintialgoritmit jaetaan kahteen ryhmään Rasterointi (kaikki tähän mennessä puhuttu) (piirto tapahtuu primitiivi kerrallaan) Säteenjäljitys (piirto tapahtuu pikseli kerrallaan) Säteenjäljityksen perusoperaatio: näkyvyyden selvittäminen Jos pisteestä x lähdetään suuntaan d, niin mihin ensimmäisenä törmätään? demo Geometrinen mallinnus / 13 Säteenjäljityksen ominaisuuksia Ominaisuuksia Kompleksisuus alilineaarinen suhteessa primitiivien määrään (N) Tulkinta: Kun N on suuri, voittaa tehokkuudessa rasteroinnin! Voidaan laskea myös: Peiliheijastukset Valon taittuminen (diffraktio) Epäsuorat diffuusit heijastukset (Monte Carlo menetelmät) Ongelma Vaatii avaruudellisen jaon, joka täytyy rakentaa uudelleen jos malleja muunnellaan (alilineaarinen kompleksisuus menetetään) Lähde: Wald et al., Faster Isosurface Ray Tracing using Implicit KD-Trees IEEE Transactions on Visualization and Computer Graphics, 2005 Geometrinen mallinnus / 14 7