T-110.1100 Johdatus tietoliikenteeseen ja multimediatekniikkaan
kevät 2014
Tietokonegrafiikka
Jyry Suvilehto
Luennon sisältö
1. Sovellusalueita 2. Rasterigrafiikkaa 3. Vektorigrafiikkaa 4. 3D-grafiikkaa
1. Säteenheitto
2. Säteenseuranta
Luento pohjautuu Timo Tossavaisen ja Jaakko Lehtisen vastaavan luennon esityksiin
1991
Wolfenstein 3D
2014
Wolfenstein:
The New Order
Animaatio, elokuvat
http://vimeo.com/16292363 vs
Simulointi
Arkkitehtuuri
The Light of Mies van der Rohe
http://graphics.stanfor d.edu/~henrik/animati ons/
KAIKKI SOVELLUKSET
RAKENTUVAT SAMOILLE
PERUSPERIAATTEILLE
Rasterigrafiikka
Digitaaliset kuvat
koostuvat pikseleistä hilassa
Pikselillä voi olla väri
Tyypillinen esitys muistissa
– Pikselit peräkkäin – Saman pikselin
värikomponentit peräkkäin
Rasteriarkkitehtuuri
Rasteriesityksen ongelmia
Rakenteeton
– Pelkkiä pikseleitä
Tarvitsee paljon tilaa
Vaikea muokata (zoomata, kiertää)
Toimivuus riippuu näytön tarkkuudesta
Vektorigrafiikka
Kuvataan piirrettävä kuva matemaattisten primitiivien avulla
– ”Ääretön” tarkkuus
– Primitiivit muodostavat kokonaisuuksia
Renderoidaan eli muodostetaan kuva rasterille
Resoluutioriippumaton: tarkkuuden voi valita renderointivaiheessa
Osat erikseen muokattavissa
Vektorigrafiikka
Täytyy määritellä
– Primitiivit – Operaatiot:
• Siirto, skaalaus, kierto
• Leikkaukset, etäisyyksien määritteleminen
• Rasterointi eli piirtäminen
Muunnokset vektorigrafiikassa
Siirrot, kierrot ja skaalaukset on esitettävissä matriiseilla, kun koordinaattivektoreiden
loppuun lisätään 1
– Esim siirto ∆x ∆y verran matriisimuodossa
Kuvauksien yhdistäminen = matriisikertolasku
Käänteismatriisi = käänteiskuvauksen matriisi
Projektiiviset muunnokset esitettävissä homogeenisilla koordinaateilla operoivilla matriiseilla samaistamalla (wx, wy, w) w≠0 pisteen (x, y) koordinaateiksi
1 1
1 0 0
1 0
0 1
y y
x x y
x y x
Vektorigrafiikan primitiivit
Säilyttävä muunnoksissa, projektiivisissa esim.
– Suora suora – Kolmio kolmio
– Hypertaso hypertaso
Tehokas kuvata, leikata ja piirtää
Suora, puolisuora, jana, hypertaso, pallo, ellipsoidi, kolmio, monikulmio,
kartioleikkaus
Geometrinen laskenta
Piirtoalgoritmit rakentuvat primitiivien
välisten geometristen laskelmien päälle
– Etäisyydet ja leikkaukset
P
Q
X1 X2
C r
C
A
B P
u
Rasterointi
Piirretään kuva geometrisesta primitiivistä
Mallintaminen
Koostetaan kuvio matemaattisista primitiiveistä
Muunnoksilla voidaan muokata kaikkia pisteitä yksi kerrallaan
– Kierto – Siirto
– Mittakaava
– Voidaan piirtää eri resoluutioisille näytöille
Katselu ja renderöinti
Piirrosta katsellaan ikkunan (window) läpi
Ikkunasta näkyvä osuus piirretään
näyttöalueeseen (viewport) esim. primitiivi kerrallaan
Leikkaaminen
Näyttöalueen ulkopuolisia osia ei piirretä
Hidasta laskea joka pikselille piirretäänkö se
Yleensä primitiivit leikataan
näyttöalueeseen ennen piirtoa
Antialiasointi
Primitiivit ovat ”äärettömän” tarkkoja
Pikselin värin poimiminen pistemäisestä näytteestä aiheuttaa laskostumista (aliasing)
Optimi: alipäästösuodatetaan ideaalikuvaa
Käytännössä: piirretään korkeammalla resoluutiolla ja pienennetään tai käsitellään osittainen pikselin peitto
3D-vektorigrafiikka
Periaatteet samat kuin 2D-grafiikassa
Ulottuvuuksia yksi lisää
– Primitiivit kolmiulotteisia
– Muunnokset kolmiulotteisia (eli 4x4-matriisi, koska lisätään loppuun 1)
Pitää tehdä projektio tasolle
– Perspektiiviprojektio
– Yhdensuuntaisprojektio (esim. Tekniset piirrokset)
Näkyvyysongelma, asiat voivat peittää toisensa
Sävytys, valolla voi olla suunta ja kappaleet voivat olla varjossa
Perspektiiviprojektio
P katsoja
n
u
projektio
Katselutaso ikkuna
Näkyvyysongelma
Myöhemmin piirretyt primitiivit peittävät aiemmin piirretyt
Kuution voi piirtää sivu kerrallaan monella eri tavalla
Säteenheitto
Heitetään säde jokaisen kuvapisteen läpi
Etsitään säteen leikkaukset primitiivien kanssa
Lähin leikkauspiste on näkyvä pinnan piste
Syvyyspuskuri (Z-buffer)
Pidetään kirjaa jokaiseen pikseliin piirretyn pinnan pisteen syvyydestä
Piirretään uudelleen pikseli, jos pinnan pistä lähempänä kuin aiempi
Läpinäkymättömät primitiivit voidaan piirtää mielivaltaisessa järjestyksess
Nopea: käytetyin tekniikka reaaliaikaisessa grafiikassa
Sävytys
Pinnalta havaitun värin muodostaminen
Valaistus, teksturointi, kuhmutus
Valaistus
Lambertin malli: pinnan normaali määrittää pisteen valoisuuden määrän
Phongin malli: taustavalo (ambient) +
hajaheijastuva valo (diffuse, mattapinta) + peiliheijastuva valo (specular)
Yksinkertaiset valonlähteet
– Spotti
– Yleisvalo (ambient) – Suuntavalo
–
Valaistus
Lambertin malli: pinnan normaali määrittää pisteen valoisuuden määrän
Phongin malli: taustavalo (ambient) +
hajaheijastuva valo (diffuse, mattapinta) + peiliheijastuva valo (specular)
Yksinkertaiset valonlähteet
– Spotti
– Yleisvalo (ambient) – Suuntavalo
n
θ θ
α r
e
Lambert shading
Phongin malli
Ei tekstuuria
Tekstuuri Pupu koostuu
kolmioista
Kolmion sisällä pisteiden
normaalit
interpoloidaan
Ohjelmoitava sävytys
Liitetään mallin kulmapisteisiin tietoa, joka interpoloidaan kolmioiden yli
Sävytysfunktio (pixel/fragment shader) laskee pinnan värin vakioista ja interpoloidusta
tiedosta, mm.
– Valonlähteiden paikat ja tyypit
– Materiaalin valaistusominaisuudet – Tekstuurit ja tekstuurikoordinaatit – Pinnan hienorakenne
Joissakin tekniikoissa useita piirtokertoja (mm. varjot)
Grafiikan liukuhihna
1. Mallinna geometria
– Tässä verkko kolmioita – Pinnnan materiaali on
hyvä olla tiedossa
Objektin koordinaatit
Grafiikan liukuhihna
1. Mallinna geometria
– Tässä verkko kolmioita – Pinnnan materiaali on
hyvä olla tiedossa
2. Lisää objektit maailman
koordinaatistoon
– Jokaisella objektilla on oma
koordinaatistonsa – Vain yksi maailman
Objektin koordinaatit Maailman koordinaatit
objekti
Toinen objekti
Maailman origo
Grafiikan liukuhihna
1. Mallinna geometria
– Tässä verkko kolmioita – Pinnnan materiaali on
hyvä olla tiedossa
2. Lisää objektit maailman
koordinaatistoon
– Jokaisella objektilla on oma koordinaatistonsa – Vain yksi maailman
koordinaatisto
3. Valitse katselupaikka ja suunta
Objektin koordinaatit Maailman koordinaatit
objekti
Toinen objekti
Maailman origo
Kameran koordinaatit
Grafiikan liukuhihna
1. Mallinna geometria
– Tässä verkko kolmioita
– Pinnnan materiaali on hyvä olla tiedossa
2. Lisää objektit maailman koordinaatistoon
– Jokaisella objektilla on oma koordinaatistonsa – Vain yksi maailman
koordinaatisto
3. Valitse katselupaikka ja suunta
4. Muuta objektit
katselukoordinaatistoon ja projisoi kuvatasolle
Objektin koordinaatit
Maailman koordinaatit Kameran koordinaatit
Kuvan koordinaatit
Grafiikan liukuhihna
Objektin
koordinaatit Maailman koordinaatit
Kameran koordinaatit
Kuvan
koordinaatit
Grafiikkaliukuhihnan ominaisuuksia
Piirtää primitiivin kerrallaan
Ei tarvitse tietoa koko näkymästä
Läpinäkymättömien primitiivien piirtojärjestys vapaa
Laitteistokiihdytetty
– Monta rinnakkaista liukuhihnaa (pipelineä) laskee yhtä aikaa
Suurelta osin ohjelmoitavissa
Maiseman geometriaa tarvitsevien
tekniikoiden toteutus hankalaa (heijastukset,
Animaatio
Animaatiossa muutetaan
koordinaattimuutoksia ajan funktiona
Objektin
koordinaatit Maailman koordinaatit
Kameran koordinaatit
Kuvan
koordinaatit
Liikkeen mallintaminen
Määritellään mallille ”luuranko” ja sidotaan pinnan primitiivit luurankoon
Käännetään luurankoa ”nivelien” kohdalta ja pinta seuraa mukana
Haaste: pehmeät kudokset, joustavuus
Virtuaalimaailma
Virtuaalimaailmaa tehtäessä otettava huomioon
– Fysiikka, törmäykset – Maailman kanssa
vuorovaikuttaminen
Säteenseuranta
Säteenseurannassa (ray tracing)
grafiikkaliukuhihnan askeleet tehdään käänteisessä järjestyksessä
Objektin
koordinaatit Maailman koordinaatit
Kameran koordinaatit
Kuvan
koordinaatit
Säteenseuranta
Säteenseurannassa
ammutaan valonsäteitä kamerasta rasterihilan läpi kohti objekteja
Säteet heijastuvat kohtaamistaan
pinnoista kunnes päätyvät
valonlähteeseen
Laskennallisesti raskasta, tarvitsee
tietoa koko maailmasta
Läpinäkyvyys, taittuminen ja
heijastukset mahdollisia
Säteenseuranta / Fotorealismi
Grafiikkaa Aallossa
ME-C3100
ME-E4100
Tuore proffa maailmalta, pitänyt vastaavia kursseja MIT:ssä viimeaikoina
Suositeltavia, mutta raskaita
– Ohjelmointi ja matematiikka olisi hyvä osata
”riittävän hyvin” etukäteen