Johdatus tietoliikenteeseen ja multimediatekniikkaan Tietokonegrafiikka Timo Tossavainen Mediatekniikan laitos, Aalto-yliopiston perustieteiden korkeakoulu Timo.Tossavainen@tkk.fi 25.3.2011
Sisältö Historiaa Rasterigrafiikkaa Vektorigrafiikkaa 3D-grafiikkaa 2/35
Historiaa 1940 Tietokoneet (Z3) 1950 CRT näyttö tietokoneessa (Whirlwind, SAGE) 1960 Vuorovaikutteinen grafiikka (Sketchpad) 1970 Grafiikan perusalgoritmit (mm. Utahin yliopisto) 1980 Fotorealistinen globaali valaistus 1990 Vuorovaikutteinen 3D-grafiikka yleistyy, OpenGL 2000 Ohjelmoitava kiihdytetty grafiikan liukuhihna 3/35
Rasterigrafiikkaa Digitaaliset kuvat koostuvat pikseleistä hilalla, rasterilla Pikselillä voi olla väri Tyypillinen esitys muistissa Pikselit peräkkäin Pikseleiden värikomponentit peräkkäin 4/35
Rasteriarkkitehtuuri Näytönohj. muisti Kuvapuskuri Videokontrolleri Monitori CPU Näytönohjain Muisti Väylä 5/35
Rasteriesityksen ongelmia Rakenteeton eli kasa pikseleitä Tilantarve Heikko muokattavuus (zoom, kierto) Riippuu näytön tarkkuudesta 6/35
Vektorigrafiikka Kuvataan piirrettävä kuva rakenteisesti äärettömän tarkkojen matemaattisten primitiivien avulla Renderoidaan eli muodostetaan kuva rasterille Resoluutioriippumaton: tarkkuus voi vaihdella Kuvan osat erikseen muokattavissa Tarvitaan sopivat primitiivit ja operaatiot Muunnokset: siirto, skaalaus, kierto Leikkaukset, etäisyydet Rasterointi eli piirtäminen 7/35
Vektorigrafiikan muunnokset Siirtojen, kiertojen ja skaalausten yhdisteet esitettävissä matriiseilla, kun koordinaattivektoreiden loppuun lisätään 1. Esim. Siirto (x, y) (x + x, y + y) matriisimuodossa 1 0 x x x + x 0 1 y y = y + y 0 0 1 1 1 Kuvausten yhdiste = matriisikertolasku. Käänteismatriisi = käänteiskuvauksen matriisi. Projektiiviset muunnokset esitettävissä homogeenisilla koordinaateilla operoivilla matriiseilla samaistamalla (wx, wy, w), w 0, pisteen (x, y) koordinaateiksi. 8/35
Vektorigrafiikan primitiivit Säilyttävä muunnoksissa. Projektiivisissa esim. suora suora kolmio kolmio hypertaso hypertaso kartioleikkaus kartioleikkaus Tehokas kuvata, leikata, piirtää Suora, puolisuora, jana, hypertaso, pallo, ellipsoidi, kolmio, monikulmio, kartioleikkaus Parametrinen esitys. Esim. Jana PQ (1 t)p + tq, 0 t 1 Implisiittinen esitys. Esim. Ympyrä ja suora x 2 + y 2 r 2 = 0, ax + by + c = 0. 9/35
Geometrinen laskenta Piirtoalgoritmit rakentuvat primitiivien välisten geometristen laskelmien päälle Etäisyydet ja leikkaukset C P Q X 1 C X 2 r P u A B 10/35
Rasterointi Piirretään approksimaatio geometrisesta primitiivistä. P C r Q 11/35
Mallintaminen Mallinnetaan piirros aiemmin käsitellyillä matemaattisilla primitiiveillä V 1 V 8 V 2 V 3 V 6 V 7 V 4 V 5 Muunnokset: Voidaan tuottaa kuva piirroksesta eri asennoissa, eri mittakaavoissa ja eri resoluutioilla. 12/35
Katselu ja renderointi Piirrosta katsellaan ikkunan (window) läpi Ikkunasta näkyvä osuus piirretään näyttöalueeseen (viewport) esim. primitiivi kerrallaan 13/35
Leikkaaminen Näyttöalueen ulkopuolisia osia ei piirretä Hidasta testata pikseli kerrallaan (saksiminen) Yleensä primitiivit leikataan näyttöalueeseen ennen piirtoa 14/35
Antialiasointi Primitiivien määrittelemä ideaalikuva on äärettömän tarkka Pikselin värin poimiminen pistenäytteestä aiheuttaa laskostumista (aliasing) Optimaalinen: Alipäästösuodatetaan ideaalikuvaa Käytännössä: Piirretään korkeammalla resoluutiolla ja pienennetään tai käsitellään osittainen pikselin peitto heuristisesti 15/35
3D-vektorigrafiikka Sama periaate kuin 2D-vektorigrafiikassa Primitiivit ja muunnokset kolmiulotteisia Tarvitaan projektio tasolle Perspektiiviprojektio (realistinen) Yhdensuuntaisprojektio (esim. tekniset piirrokset) Näkyvyysongelma Sävytys 16/35
Perspektiiviprojektio P katsoja projektion keskus n u projektio ikkuna projektori katselutaso projektiotaso 17/35
Näkyvyysongelma / Piilopintojen poisto Myöhemmin piirretyt peittävät aiemmin piirretyt. Kuution piirto sivu kerrallaan voi tuottaa ao. tulokset. 18/35
Säteenheitto Heitetään säde jokaisen kuvapisteen läpi Haetaan säteen leikkaukset primitiivien kanssa Lähin leikkauspiste on näkyvä pinnan piste 19/35
Syvyyspuskuri (Z-buffer / depth buffer) Pidetään kirjaa jokaiseen pikseliin piirretyn pinnan pisteen syvyydestä Piirretään pinnan piste, jos lähempänä kuin aiemmin piirretty Läpinäkymättömät primitiivit voidaan piirtää mielivaltaisessa järjestyksessä Nopea: Käytetyin tekniikka reaaliaikaisessa grafiikassa Tarkkuusongelmia, jos suuria mittakaavaeroja 20/35
Sävytys (Shading) Pinnalta havaitun värin muodostaminen Valaistus, teksturointi, kuhmutus 21/35
Paikallinen valaistus Phongin malli: taustavalo (ambient) + hajaheijastuva valo (diffuse, mattapinnat) + peiliheijastuva valo (specular, kiiltävät pinnat) Yksinkertaisia valonlähteitä: piste, suunta, spotti x θ l n r θ θ θ α e x cos θ 22/35
Grafiikan liukuhihna (yksinkertaistettu) Reaaliaikaisessa grafiikassa käytetty laskennan malli kärkipisteet interpoloitava data Primitiivien kokoaminen kolmiot Leikkaus katselupyramidiin leikkaaminen kolmiot Rasterointi kolmion läpikäynti syvyyspuskuri näkyvät pintapisteet kolmion pinnalla interpoloitu data Sävytys tekstuurit vakiot ym. pikselin väri 23/35
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 (kuhmut) Joissakin tekniikoissa useita piirtokertoja (esim. varjot). 24/35
Esimerkki: Volumetrinen sumu Väri muuttuu valonsäteen sumun sisällä kulkeman matkan mukaan 25/35
Esimerkki: Varjot Piste varjossa -testi piirtämällä varjotilavuudet 26/35
Esimerkki: Varjot (2) 27/35
Grafiikkaliukuhihnan ominaisuuksia Piirtää primitiivin kerrallaan Ei tarvitse tietoa koko näkymästä Läpinäkymättömien primitiivien piirtojärjestys vapaa Laitteistokiihdytetty Suurelta osin ohjelmoitavissa Maiseman geometriaa tarvitsevien tekniikoiden toteutus hankalaa (heijastukset, varjot, globaali valaistus). 28/35
Fotorealistinen kuvanmuodostus Simuloidaan valon heijastumista maisemassa Tarvitsee tietoa koko maisemasta Laskennallisesti raskasta 29/35
Tietokoneanimaatio Muutetaan piirrettävän maailman tilaa suhteessa aikaan Piirretään kuvia tietyillä ajanhetkillä Pieni muutos kuvien välillä saa aikaan liikehavainnon Reaaliaikainen 20+ kuvaa/s. Kaksoispuskurointi: Näytetään yksi kuva, piirretään toinen, vaihdetaan kun piirto valmis Ongelman monimutkaisuuden takia tarvitaan työkaluja helpottamaan animaation määrittelyä. Liikkeet voivat olla suunniteltuja tai pohjautua fysiikkaan tai interaktioon. 30/35
Esimerkki: Käänteiskinematiikka Nivelrakenteen liikkeen laskeminen tavoitteiden perusteella 31/35
Virtuaalimaailmat Törmäykset, fysiikka, interaktio 32/35
Tutkimus: Kuvapohjainen mallinnus 33/35
Grafiikan kurssit Vuorovaikutteisen tietokonegrafiikan perusteet Vuorovaikutteisen tietokonegrafiikan jatkokurssi 3D-tuotanto Tietokoneanimaatio Tietokonegrafiikan seminaari Keinotodellisuus Erikoiskurssit/tutkimusseminaarit 34/35
A? 35/35