TIEA311 - Tietokonegrafiikan perusteet - kevät 2018

Tähän tulee kurssin mittaan linkit kurssimateriaaliin ja kevään 2018 kurssin yksityiskohtiin...

Aikataulut ja kevään viralliset kuviot ovat kurssin Korppi-sivulla. Kurssin etenemisestä tiedotetaan sähköpostilistalla tiea311_kevat2018@korppi.jyu.fi, jonka viestit jäävät Korppiin julkiseen arkistoon.

Kurssimateriaalin kehitysversio on avoimessa git-repositoriossa (päivittyy koko kevään kurssin ajan). Luentovideot tulevat (sikäli kuin tallennustekniikka toimii kunkin luennon kohdalla) Moniviestimeen kurssin kansioon, jonka salainen polkuavain toimitetaan vain kurssia suorittaville opiskelijoille.

Vertaistukikanavat

Sähköpostilista tiea311_kevat2018_keskustelu@korppi.jyu.fi on vertaistukea eli vinkkien pyytämistä ja antamista varten! Se arkistoituu Korppiin, mutta vain listan jäsenille. Ei tarvitse siis jännittää saavansa ikuista WWW-julkisuutta keskustelulistan kautta :).

Epävirallinen IRC-kanava löytyy nimellä, jossa on risuaita ja kurssikoodi pienillä kirjaimilla. Se lienee reaaliaikaisin vertaistuen moodi ja tietotekniikan opiskelijalle luonteenomainen, mutta Jyväskylän yliopiston tukema virallinen foorumi se ei ole. Ja luennoitsija lupaa enimmäkseen idlata.

Suoritustavat ja -vaatimukset

Toistetaan about viime vuoden kurssin mukaisesti, mutta yritetään parantaa esitysmuotoa ja sitä kautta vaatia demoissa hivenen enemmän kuin viimeksi. Näemme, miten siinä sitten käy tällä kertaa... Opiskelijalle tarjotaan kolme vaihtoehtoista suoritusmoodia tai "trackia". Mieti tarkkaan, mikä soveltuu itsellesi kokonaisuuden kannalta parhaiten:

Vaihtoehto 1/3: "Fast-track"

Suoritus viime vuoden kurssin mukaisesti omaan tahtiin, mutta nopeammin kuin tämä kurssikerta etenee tai omasta mielestäsi "matelee". Deadline kaikille tehtäville on 17.2.2018 (reilusti ennen kevään 2018 kurssin loppua!). Tässä tapauksessa on suositeltavaa siirtyä seuraamaan viime vuoden materiaalia kokonaisuudessaan eli käydä kurssi kokonaan viime vuoden mukaisesti. Ohjausta ei tarjota, koska uusi kurssi etenee omaan tahtiinsa ja esitysjärjestys poikkeaa edellisestä vuodesta. Jos kuitenkin olet varma, että homma hoituu itsenäisesti, niin emmepä estele. Soveltuu, jos asia sattuu olemaan esimerkiksi harrastusten kautta hanskassa jo aiemmin. Kaikki tehtävät palautetaan kerralla. Palauttamisen ajankohdasta sovitaan ennakkoon vastuuopettajan kanssa, ja palautuksen yhteydessä keskustellaan vastauskoodiin liittyvistä yksityiskohdista kasvotusten - täten opettaja varmistuu kontrollikysymysten kautta siitä, että opiskelija on itse tehnyt vastauksensa.

Vaihtoehto 2/3: "Deadline track"

"Normaali" suoritustapa: seuraile tämän vuoden luentoja ja niihin nivellettyjä demoja aktiivisesti. Ohjaus tarjotaan tämän suoritustavan mukaisesti. Vaatimukset ja etenemistahti määrittyvät dynaamisesti kurssin tämän kerran populaation mukaisesti. Tiukka deadline kaikille tehtäville on opetusperiodin loppu eli 9.3.2018. Soveltuu HOPSin mukaiseen tekemiseen, jossa kurssi aktuaalisesti päättyy ja seuraavan periodin kurssit alkavat lukuvuoden aikataulutuksen mukaisesti. Tällä suoritustavalla voi kuitata kurssin 5 opintopistettä varmuudella ennalta tunnetun aikataulun mukaisesti ja mittauttaa arvosanalla kykynsä suhteessa muihin samanaikaisiin suorittajiin.

Vaihtoehto 3/3: "Undeadline track"

Keväällä 2018 tapahtunutta kurssia voi suorittaa omaan tahtiin seuraavan kurssitoteutuksen alkamiseen asti eli käytännössä mitä todennäköisimmin kalenterivuoden 2018 ajan. Ohjausta ei tarjota enää 9.3.2018 jälkeen, koska tämä kurssi ei ole opettajien työsuunnitelmassa muina aikoina. Kaikki tehtävät palautetaan kerralla sitten, kun on omasta mielestä valmista. Palauttamisen ajankohdasta sovitaan vastuuopettajan kanssa sitten, kun tehtävät ovat omasta mielestä valmiit, ja palautuksen yhteydessä keskustellaan vastauskoodiin liittyvistä yksityiskohdista kasvotusten - täten opettaja varmistuu kontrollikysymysten kautta siitä, että opiskelija on itse tehnyt vastauksensa ja että ne vastaavat ominaisuuksiltaan itsearviota.

Kevään 2018 luennot

Kurssille ilmoittautuneet voivat katsoa luennot Moniviestimestä kurssin hakemistosta. Polkuavaimen saa opettajalta, jos on päässyt unohtumaan.

Luento 1: tiea311_2018_lec01.pdf Paikalliset alkuinfot. Pieni 'sneak preview' spline-käyriin, joihin palataan hyvin pian.

Luento 2: tiea311_2018_lec02.pdf Kurssin syvällisemmistä tavoitteista, ohjelmoinnin oppimisesta, C++:sta ja Assigment 0:sta.

Luento 3: tiea311_2018_lec03.pdf Assigment 0 pitäisi olla työn alla. Jatketaan sen parissa. Lähdetään liikkeelle grafiikassa tarvittavan matematiikan suhteen.

Luento 4: tiea311_2018_lec04.pdf Vektoriavaruus, vektori, kantavektori, polynomi, polynomeista muodostuva vektoriavaruus, kannan ilmaiseva "vasen notaatio", lineaarimuunnokset ja niitä vastaavat matriisit, kuvatut kantavektorit muunnosmatriisin sarakkeina alkuperäisen kannan suhteen, esimerkkinä rotaatio ja skaalaus, suositus ja esimerkki todeta matriisien määrittelyt ja laskut mallikirjastossa vecmath.

Luento 5: tiea311_2018_lec05.pdf Affiinien (eli siirtoja sisältävien) kuvausten toteuttaminen 3D-vektoreille 4x4-matriiseilla: kehys (engl. "frame") eli suuntakannan ja origon yhdistelmä, 4x4-muunnosmatriisin lineaarinen ja siirtävä osamatriisi, siirtomuunnos ja affiini muunnos suhteessa alkuperäiseen kehykseen. Kehotus tutustua vastaaviin toteutuksiin vecmath-kirjaston koodissa. Pikakertaus Spline-käyrien tavoitteista ja johdanto perusteisiin. Jatkuvan ilmiön (esim. käyrän) diskretointi (eli grafiikassa "tesselointi" eli muuttaminen "laatoiksi"). Interpoloinnin ja approksimoinnin ero, Bezier-käyrä perusteltuna välimaastona näistä. Kuutiollinen Bezier-käyrä ja kontrollipisteiden vaikutusfunktiot (tietyt kolmannen asteen polynomit). Bezier-käyrän mukavat ominaisuudet muodon hallittavuuden kannalta. Kuutiolliset polynomit vektoriavaruutena. Monomikanta. Kannanvaihto matriisilaskuna. Bernsteinin polynomit "kanoninen" kanta Bezier-käyrille. Käyrän määritys käyttämällä kontrollipisteitä painokertoimina kantafunktioille. Kannanvaihto monomikannasta Bernstein-kantaan ja takaisin. Käänteinen kannanvaihto ja käänteismatriisi. Yleinen matriisiesitystapa "GBT(t)". Lupa aloitella Assigment 1:een tutustumista, kun muistaa tähdätä "GBT(t)" -idean hyödyntämiseen.

Luento 6: tiea311_2018_lec06.pdf Alkuun hyvä tietää -osastoa: Korkeamman asteen Bezierit korkeamman asteen Bernsteinin funktioiden kautta, De Casteljaun algoritmi Bezier-käyrän piirtämiseksi "kynällä ja viivottimella" tai algoritmisesti ilman polynomilaskuja. Sitten eteenpäin: Käyrän hetkellinen suunta sijainnin derivaattana, havaintona spline-kannan (ja HUOM: jopa kanonisen monomikannan!) derivointi antaa halutun tuloksen. Käyrän hetkellinen kiihtyvyys sijainnin toisena derivaattana eli tangentin derivaattana, geometrinen tulkinta. Jatkuvuusluokat C0, G1, C1, C2. Etenkin animaatioissa haluttaisiin C2. Jatkuvuuksien C0-C1 aikaansaanti kuutiollisten Bezier-pätkien saumapisteissä lukitsemalla viereisten pisteiden keskinäinen suunta ja etäisyys. Havainto, että C2 vaikea saavuttaa saumapisteissä.

Luento 7: tiea311_2018_lec07.pdf Assignment 1 kannattaa aloittaa, vaikka teoriaa kertyy lisää parin luennon ajan. Aloitettava ajoissa! Aloitettava ajoissa! Katsaus sisältöihin, joita kurssilla pitäisi olla jo hahmotettu ja mitä kohti ollaan menossa. Save-the-date: Instanssi 2018 tapahtuu 1.-4.3.2018. Lupaus ylimääräisestä opintopisteestä, jos uskaltautuu tekemään tuotoksen demokisaan. B-splinen idea. Liukuva ikkunointi ja ero Bezier-pätkiin. Kantapolynomit B-splinelle yhden ikkunan sisällä. Ikkunoinnin idea ja vaikutusfunktioiden (kannan) jatkuvuus ikkunoiden rajalla. Kannanvaihtomatriisi (HUOM: ainoa ero 4 pisteen Bezier-käyrän ja 4 pisteen B-splinen laskemisessa). Epäjatkuvuuden ja interpoloinnin aikaansaanti toistamalla B-splinen kontrollipisteitä (karkea tapa, mutta mahdollinen ja tällä kurssilla sopiva). Splinen esitystavan vaihto kertomalla kontrollipisteet matriisilla. Kaavan johtaminen. NURBS perusidea ja demo, jossa mm. sydänkäyrä (kjeh..). Esimerkki tiedonhausta Googlella, prokrastinaatiosta ja prokrastinaation lopettamisesta. Tauon jälkeen käytännön esimerkkiä B-splinen kontrollipisteistä, diskretoinnin tiheydestä. Kynän ja paperin käyttöesimerkki (kvua lisätty kalvosarjan alkuun). Hyvä tietää -osastona erilaisia tapoja määritellä pintoja: Spline-tilkut eli patchit. Tensoritulo ("super hardcore" tässä vaiheessa koulutusta...). Displacement mapping. Subdivision surfacet eli "siloitetut verkot". Menetelmien ketjuttaminen, esim. subdivision+displacement. Implisiittipinnat ja pari sydäntä lisää. Point set surfaces ("Pistepilvipinnat"). Huomioita Assignment 1:n tavoitteesta pintojen osalta. HUOM: Tämän kalvosetin pari viimeistä slidea katsottiin vasta seuraavan luennon loppuvaiheessa.

Luento 8: tiea311_2018_lec08.pdf (kalvosarja olennaisesti tyhjä, koska tämä luento oli pääosin livekoodausta Visual Studiolla). Luentovideossa tärkeitä pointteja työtavoista.

Luento 9: tiea311_2018_lec09.pdf Alussa loput teoriasta, jolla Assignment 1 on mahdollista tehdä. Kannustus tarttua toimeen ja viimeistellä oma vastaus piakkoin. Kertaus ja syvennys vektoriavaruuden kannasta ja muunnoksista sekä affiineista muunnoksista kehyksissä (frame). Kannan/kehyksen vaihtamisesta vs. koordinaattien muuntamisesta saman kehyksen sisällä. Konkreettisessa 3D-avaruudessa toimivien havaintovälineiden askartelu sekä hierarkkisen mallin perusidea selitettynä kyseisillä välineillä (videolla). Loppupuolella tämän vuoden ensimmäinen yritys selittää yhdessä kehyksessä annettu muunnos toisen kehyksen suhteen. Perinteiden mukaan uusiksi menee seuraavan luennon alussa. Kalvosarjaan lisätty selitys, jonka piti tapahtua jo luennolla :).

Luento 10: tiea311_2018_lec10.pdf Aluksi yhdessä kehyksessä annetun matriisin vaikutus toisen kehyksen koordinaateille (korjaus edelliseen). Homogeeniset koordinaatit, projektiivinen ekvivalenssi, perspektiivimuunnos matriisilaskun ja koordinaattiesityksen homogenoinnin kautta. Tarkennusta yhdistettyihin koordinaattimuunnoksiin (videolla jäbän sanoessa "nelikko" se voi olla oikeasti "kolmikko" tai "kaksikko" mutta joka tapauksessa koordinaattiesitys...). Inspiraatiota oikeasta tutkimuksesta (julkaisu ja video). Normaalivektorin oikeellinen kuvaaminen käänteismatriisin transpoosilla. Esimerkki matemaattisesta päättelystä (vaikka piirrellähän voi myös hyväksymällä lopputuleman ja laittamalla sen koodiinsa). Hierarkkisen mallin perusidea, näkymägraafi.

Luento 11: tiea311_2018_lec11.pdf Hierarkkinen malli. Tietorakennemallin hahmottelu: kynä ja paperi auttaa tässäkin. Ajonaikainen rakenne, tallennus ja lataus sarjallistettuna esim. tekstimuotoisessa formaatissa (XML, JSON tai muu sopiva). Näkymägraafin läpikäynti rekursiolla. Koordinaattimuunnoksen ylläpito matriisipinossa. Vanha OpenGL esimerkkinä tilakoneesta ja " tietyllä tapaa yksinkertaisesta" grafiikkarajapinnasta. Sanoja ohjelmoinnin ajattelumallista. Kokeilua Visual Studiolla: saataisiinko Assignment 0:n teepannusta tehtyä hallituilla pikkumuunnoksilla "hierarkkinen malli". Tehtiin teepannumaatuskat. Tauon jälkeen Assignment 2:n lähtötilanne ja muistutus mikroluokissa tarvittavasta pikkusäädöstä. Hierarkkinen malli kurssilogo.js:ssä, ModelView ja Perspective -matriisit WebGL-renderöinnissä. Eri kieli ja yksityiskohdat, muta sama homma, sama periaate, sama kaava. Juttua GPU:n rinnakkaislaskennasta. Kurssilogon näkymägraafi. Assignment 2:n handoutin selailua. Alustusta C++:n new-operaattorista. Tikku-ukkomallin parametrisointia. Jumppavideo luentosalin pöydällä: nivelten vapausasteet. Forward kinematics (perusteet), inverse kinematics (kiinnostava tutkimuskohde). Pari jännää artikkelia ja videota IK-aiheesta. "Tähtäyspisteitä" ja vielä muistutus alkuperäisten artikkelien lukemisen ja matematiikan merkityksestä.

Luento 12: tiea311_2018_lec12.pdf Terveiset kevään YPE15:stä - ajatuksia osaamistavoitteista ja opettajan roolista. Tämän kurssin roolista perusohjelmointitaidon harjaannuttamisessa "Bloomin taksonomian" tasolle "soveltaminen", mikä edellyttää "ymmärtämistä", mikä edellyttää tietämistä... Luennolla tosin ulkomuistista en muistanut, että Bloomilla tasoja oli toki vieläkin enemmän, ja perusohjelmoinnin osalta parhaimmillaan päästään pian tasoille "analysointi", "syntetointi" ja "arviointi" (Bloom wikipediassa). Havainnekuva tikapuista, Assignment 4:stä ja luennoitsijan näkemys seniorikoodarin ja juniorikoodarin erosta. Hyvä tietää -osastona eli Bloomin "Tietää" -tasolla poimintoja MIT:n laajemman kurssin sisällöistä: perinteinen animaatio vs. tietokoneanimaatio. Avainasetelmat ja interpolointi. Proseduraalinen ja fysiikkaan perustuva animaatio. Rigging eli "näkymättömien lankojen" määritys animaation kontrolloimiseksi. Jatkokurssin mainos: Skinning / vertex blending käydään läpi siellä. Fysikaaliset mallit, perusidea differentiaaliyhtälön eli DY:n ratkaiseminen eli integrointi ajan suhteen. Miljoonan dollarin kysymys nestevirtauksen yhtälöihin odottaa vastausta - mielenkiintoinen vaihtoehto yhden tai useamman elämäntyön päämääräksi... ACM:n SIGGRAPH mainittu - tietokonegrafiikan uusimmat tulokset esillä mm. kyseisen organisaation vuosittaisessa konferenssissa. Massive Software esimerkkinä tietokonegrafiikan tutkimuksesta - havaintona kyseessä aika monitieteinen sovellus, jolla voi mallintaa örkkiarmeijan lisäksi messukeskusta ja kaupunkikortteleita. Jousimassamallien perusidea, kankaiden mallinnuksesta. Törmäystarkasteluista. Alustavasti liikkuvan pisteen ja pinnan törmäyskohdan eli suoran ja pinnan leikkauskohdan määrittämisestä. Törmäystarkastelujen optimoinnista käymällä rekursiivisesti läpi hierarkkista mallia (pallopuu).

Luento 13: tiea311_2018_lec13.pdf Alussa "välikoe" (jos olisi aikaa tehdä OPSin korulauseissa luvattu oikea tentti tälle kurssille, niin luennolla läpikäyty tehtävä olisi aika varma kysymys siihen). Välikokeessa kaksi osiota: lineaarialgebra ja C++. Juttua C++:n ominaisuuksista, erityisesti pointtereista. Kertausta tähänastisesta. Pino, keko, olion elinaika. Varo vaaroja. Brutaali esimerkki lehmästä ja konekivääristä, joille voi molemmille sanoa "ammu". Tauon jälkeen Visual Studion kanssa Assignment 2:n ja 4:n lähtöä ja yritys näyttää, mikä on tärkeintä: Selvitetään pala kerrallaan, mitä pohjakoodi tekee, mitä mikäkin koodiin kirjoitettu juttu tarkoittaa ja mietitään, mikä pienenpieni askel täytyisi seuraavaksi saavuttaa (joko ymmärtämisen tai lopulta ominaisuuden koodaamisen kannalta). Epäillään kaikkea, kunnes ollaan varmoja asioiden toiminnasta. Tehdään pieni ja erityisesti hallittu muutos kerrallaan ja muistetaan nauttia onnistumisen riemusta, kun se pieni muutos onnistuu!! Tätä prosessiahan meillä väitetään ohjelmoinnin olevan jo ensimmäisen kurssin alusta asti, mutta se meinaa aina välillä unohtua, ja siitä aiheutuu suurin osa kärsimyksestä ja etenemisen esteistä pidemmän päälle. Muistutellaan mieleemme perusteet tässä vaiheessa! Erityisesti Assignment 4 on liki mahdoton, jos ensimmäinen vaihe ei ole pohjakoodin ja tehtävänannon hallittu omaksuminen.

Luento 14: tiea311_2018_lec14.pdf Renderöinti (rendering) eli kuvanmuodostus. Virtuaalinen 2D-kuvataso. Pikselimatriisi. Kunkin pikselin värin määrittäminen erikseen. Pikselin väri riippuu siitä, mikä on näkymän lähin esine suoralla, joka kulkee kamerasta pikselin läpi. Voidaan tehdä säteenheitolla (ray casting) / säteenseurannalla (ray tracing) tai rasteroinnilla (rasterization). Säteenheiton perusteet tällä kurssilla, rasteroinnin perusteet jatkokurssilla. Säteenheittoalgoritmi pseudokoodina. Säteenheiton ja -seurannan ero - jälkimmäinen on rekursiivinen, ei siinä sinänsä muuta. Säteen matemaattinen representaatio. Historiaa: jo Albrecht Durer 1500-luvulla seurasi säteitä perspektiiviprojektioiden piirtämiseksi - kuvattavana objektina esimerkiksi luuttu. Neulansilmäkamera (camera obscura) Gemma Frisiuksen kuvaamana vuonna 1545 ja Abelardo Morellin soveltamana 2000-luvulla. Näkymäpyramidi (view frustum). Kameraparametrit eli sijainti, katselusuunta ja yläsuunta (joista välttämättä määrittyy kohtisuora suunta oikealle) sekä kuvan laajuus (field of view) eli "zoomaus" vaakasuuntaan. Lisäksi kuvasuhde (aspect ratio), esim. nykyinen laajakuva 16:9 tai vanha TV-formaatti 4:3. Kuvakoordinaattien normalisointi välille [-1,1]. Säteen suunnan määrääminen kamerasta kohti virtuaalista kuvapintaa. Perspetiivi vs. yhdensuuntaisprojektio. Muita projektioita: esimerkiksi norsun pylly näkyy yhtä aikaa kuin norsun naama, jos kuvapinta on kaareva ja säteitä heitetään eri suunnista kaaren sisään päin.

Luento 15: tiea311_2018_lec15.pdf Pistetulon ominaisuuksia (Vielä esimerkki Googlen ja Wikipedian käytöstä). Säteen esittäminen katselupisteen läpi kulkevana suorana. Katselupisteen ja normalisoidun suuntavektorin määräämä funktio, jossa vapaana parametrina etäisyys katselupisteestä (eksplisiittinen yhtälö, ts. sellainen, josta voidaan määrittää pisteitä parametrilla). Tason esitys pistetulon avulla (implisiittisenä yhtälönä, ts. sellaisena, jolla voi testata pisteen kuulumista joukkoon, mutta ei suoraan määrittää pisteitä parametrien avulla). Idea säteen leikkauskohdan määräämisessä: sijoitetaan säteen eksplisiittinen yhtälö leikattavan muodon implisiittiseen yhtälöön ja ratkaistaan yhtälö(ryhmästä) vapaa parametri eli etäisyys katsojasta. Sijoitetaan etäisyys säteen kaavaan ja lasketaan piste. Esimerkki aksiomaattisesta algebrasta vs. "koulumatematiikka". Mitä pitää laskea itse paperille, kun lukee "selvästi nähdään, että" -kaavan. Säteen ja pinnan leikkauspiste. Säteen ja pallon leikkauspiste (sama homma eri kaavalla; koulusta tuttu toisen asteen yhtälö). Säteen ja kolmion leikkauspiste painopistekoordinaattien avulla. Cramerin sääntö tehokas tapa 3D:ssä. Ilmaiseksi " alfa, beeta ja gamma", joilla voi interpoloida kärkipisteittäisia arvoja lineaarisesti kolmion sisällä. Parempi kuin ilmainen ämpäri. Näkymägraafin solmut oliopohjaisena mallina, jossa kaikki peritään "Object3D":stä. Virtuaaliset metodit säteen leikkaamiselle ym. Assignment 4 käyntiin täyteen vauhtiin! Koordinaatistomuunnokset säteenseurannassa: selkeämpää muuntaa säteen määritelmä kuin itse objekti. Suositeltavaa olla normalisoimatta säteen suuntavektorin pituutta, mutta ottaa tämä huomioon leikkauspistekaavoissa. Muunnokset oltava erilaiset sijainnille, suunnalle ja normaalivektorille. Idea varjojen lisäämisessä säteenseurannassa.

Luento 16: tiea311_2018_lec16.pdf Kurssin tapahtumahorisontti lähestyy + tapahtumahorisontti fysiikan opiskelijan visualisoimana. Instanssi 2018 jälkipyykki: tämän vuoden kurssilainen 3. sijalla Instanssi demo -kilpailusarjassa. Katsottiin tuotos. Väri ja näkeminen fysikaalisena ja biologisena ilmiönä. Spektri. Jyväskylän yliopiston huippututkimusta hyperspektrianalyysistä iltapäivälehden otsikossa. Valonlähteen, esineen ja silmän aistinsolujen rooli näkemisessä. Metameerit ja perustelu RGB-värikolmikon käytölle. Värit ovat lineaarialgebraa kolmessa ulottuvuudessa. Haastavaa biologisista ja teknologisista syistä. Väriavaruudet, mm. CIE XYZ. Gamma-korjaus. Varjostamisen ja pintamateriaalin mallintamisen perusteet. Valosäteilyn heijastuminen pistemäisen, suunnatun ja spottivalon tapauksessa. Materiaalin heijastavuuden mittaaminen: BRDF-funktion idea. Diffuusi heijastus.

Luento 17: tiea311_2018_lec17.pdf Viimeinen luento: Peiliheijastus (specular reflection) ja karkea "globaali" valaistus (ambient reflection). Phongin valaistusmalli. Keilojen (lobe) määritys realistisempiin malleihin. Phongin pistevarjostus interpoloimalla kärkipisteittäiset normaalit painopistekoordinaateilla. Heijastuminen (reflection) ja taittuminen (refraction). Dispersio (dispersion). Realistisen pinnan ja puolivarjojen mallinnus satunnaisilla sädekimpuilla. Näytteistys ja haamut (sampling, aliasing). Haamujen poisto ylinäytteistyksellä (supersampling). Keskiarvoistus ajan suhteen (motion blur), linssin mallinnus. Rekursiosyvyyden hallinta. Säteenseurannan tehostaminen hierarkkisella ympäröivien tilavuuksien rakenteella. Tekstuurit ja tekstuurikoordinaatit. Proseduraaliset eli ohjelmoidut tekstuurit. Ken Perlinin Oscar-palkittu kohina-algoritmi. Viimeinen kalvo: miten tästä eteenpäin.

Hyvä tietää -osastoa (ei ollut aikaa luennoilla)

Monte Carlo -simulointia globaalille valaistukselle: tiea311_2018_montecarlo.pdf Globaali valaistus, Monte Carlo -simulointi. "Photon mapping" perusidea.

Rasteroinnista ja modernista GPU-raudasta (nivel kohti jatkokurssia): tiea311_2018_rasterization.pdf Rasterointi, ero säteenheittoon. Kolmioiden piirto rautatasolla, z-puskuroinnin perusidea. Perspektiiviprojektio ja kolmioiden leikkaaminen näkymäpyramidiin.

Demot

Mahdollisesti osittain uudistuvan toteutustavan vielä speksautuessa voi alkaa jo tekemään Assignment 0 ja Assignment 1 -tehtäviä alkuperäisistä: https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-837-computer-graphics-fall-2012/assignments/ . Alkuperäisestä tehtäväsetistä jätetään väliin puolet Assignment 2:sta sekä Assignment 3 ja 5 kokonaan. Täkäläisittäin tehdään Assignment 0, 1, 2 (osittain) ja 4, joihin liittyvä teoria ehditään käydä läpi. Jokainen tehtävä arvostellaan skaalalla 1-5, ja paikallisen kurssimme arvosanaksi tulee keskiarvo.

HUOM: Visual Studio 2017 -käyttäjiä varten paketoin Assignment 2:n jakelupaketin uudelleen tähän: a_2_vs2017.zip. MIT:n versiossa oli yhteensopimaton FLTK-kirjasto puolen vuosikymmenen takaa. Ilmoita sähköpostilistalla, jos on teknisiä ongelmia - ekalla yrityksellä voip aina mennä jotain pieleen.

Assignment 0

Deadline: pe 2.2.2018

Palautustapa:

Assignment 1

Deadline: su 18.2.2018

Palautustapa:

  • Tasan yksi ZIP-pakattu tiedosto nimeltään "vastaus.zip", sähköpostin liitetiedostona
  • Tiedostossa vastaus.zip täytyy olla seuraavanlainen sisältö:
  • Vastaanottajat paavo.j.nieminen@jyu.fi ja jarno.m.kansanaho@jyu.fi (tasan 2 kpl)
  • Postin otsikko tasan "Assignment 1 palautus"
  • Tehtävä tarkastetaan seuraavasti: puhtaaseen hakemistoon, jossa on mallikoodi, avataan palauttamasi vastaus.zip (jolloin muuttamasi tiedostot korvaavat mallikoodin). Koodi käännetään Linuxilla (ts. älä linkitä Windowsin tai Macin systeemikirjastoihin!) ja ajellaan itsearviosi mukaisilla swp-tiedostoilla ja tehtävänannon mukainen toimivuus todetaan visuaalisesti.
  • Vaatimukset:

    Assignment 2

    Deadline: su 25.2.2018

    HUOM: Visual Studio 2017 -käyttäjiä varten paketoin Assignment 2:n jakelupaketin uudelleen tähän: a_2_vs2017.zip.

    Palautustapa: (olennaisesti sama kuin viimeksi)

  • Tasan yksi tiedosto, vastaus.zip, sähköpostin liitetiedostona
  • Tiedostossa vastaus.zip täytyy olla seuraavanlainen sisältö:
  • Vastaanottajat paavo.j.nieminen@jyu.fi ja jarno.m.kansanaho@jyu.fi (tasan 2 kpl)
  • Postin otsikko tasan "Assignment 2 palautus"
  • Tehtävä tarkastetaan seuraavasti: puhtaaseen hakemistoon, jossa on mallikoodi, avataan palauttamasi vastaus.zip (jolloin muuttamasi tiedostot korvaavat mallikoodin). Koodi käännetään Linuxilla (ts. älä linkitä Windowsin tai Macin systeemikirjastoihin!) ja ajellaan itsearviosi mukaisilla tiedostoilla ja tehtävänannon mukainen toimivuus todetaan visuaalisesti.
  • Vaatimukset:

    Assignment 4

    Deadline: pe 9.3.2018 tai sopivasti sen jälkeen (ts. Aktiivisen ohjauksen osalta kioski kiinni 1. periodin osalta, koska on siirryttävä kevään 2. periodin kursseja kohti! Teknisesti palautuksia saa tehdä myöhemminkin, sitten kun on omasta mielestä valmista.)

    Palautustapa: (olennaisesti sama kuin viimeksi)

  • Tasan yksi tiedosto, vastaus.zip, sähköpostin liitetiedostona
  • Tiedostossa vastaus.zip täytyy olla seuraavanlainen sisältö:
  • Vastaanottajat paavo.j.nieminen@jyu.fi ja jarno.m.kansanaho@jyu.fi (tasan 2 kpl)
  • Postin otsikko tasan "Assignment 4 palautus"
  • Tehtävä tarkastetaan seuraavasti: puhtaaseen hakemistoon, jossa on mallikoodi, avataan palauttamasi vastaus.zip (jolloin muuttamasi tiedostot korvaavat mallikoodin). Koodi käännetään Linuxilla (ts. älä linkitä Windowsin tai Macin systeemikirjastoihin!)
  • Vaatimukset:

    HUOM: Handoutin listan kohta 16 eli tekstuurikartta ei kuulu maksimitavoitteeseen, tosin se vaikuttaa aika triviaalilta lisäykseltä, jos siihen asti on saatu tehtyä ja haluaa brassailla.

    HUOM: Alkuperäisistä kahden periodin kurssiin mitoitetuista tehtävistä jätettiin pois puolet Assignment 2:sta, Assignment 3 kokonaan ja Assignment 5 kokonaan, koska oma introkurssimme on periodin mittainen. Suurin piirtein vastaavasti luennoilla käytiin läpi noin 50% MIT OCW:n täyden lukukauden mittaisesta kurssista.